<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Croc-Informatique.fr &#187; Programmation</title>
	<atom:link href="http://www.croc-informatique.fr/category/programmation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.croc-informatique.fr</link>
	<description>Le Blog Note d'Olivier Legras</description>
	<lastBuildDate>Wed, 18 Jan 2012 16:29:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Classer le fichier passwd par UID</title>
		<link>http://www.croc-informatique.fr/2011/09/classer-le-fichier-passwd-par-uid/</link>
		<comments>http://www.croc-informatique.fr/2011/09/classer-le-fichier-passwd-par-uid/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 08:19:09 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[classer]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[trier]]></category>
		<category><![CDATA[uid]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2011/09/classer-le-fichier-passwd-par-uid/</guid>
		<description><![CDATA[Voici une commande bien pratique qui permet de classer le fichier passwd par UID : sort -t : -k 3,4 -g /etc/passwd sort –&#62; Commande de trie -t –&#62; défini le séparateur. Dans le fichier /etc/passwd, le séparateur est ‘:’ -k –&#62; défini l’ordre du trie soit pour notre exemple, nous voulons trier la colonne [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Voici une commande bien pratique qui permet de classer le fichier passwd par UID :</p>
<blockquote><pre>sort -t : -k 3,4 -g /etc/passwd</pre>
</blockquote>
<p>sort –&gt; Commande de trie</p>
<p>-t –&gt; défini le séparateur. Dans le fichier /etc/passwd, le séparateur est ‘:’</p>
<p>-k –&gt; défini l’ordre du trie soit pour notre exemple, nous voulons trier la colonne 3 (UID) puis si plusieurs utilisateurs ont le même uid, on trie par la colonne 4 (GID)</p>
<p>-g –&gt; Le fichier à trier</p>
<p>&#160;</p>
<p><span id="more-682"></span></p>
<p>Après on peut aussi très bien n’afficher que le nom d’utilisateur et l’uid grâce à la commande awk :</p>
<blockquote>
<p><font face="Courier New">sort -t : -k 3,4 -g /etc/passwd |&#160; tr &#8216;:&#8217; &#8216;\t&#8217; | awk &#8216;{print $1 &quot;&#8211;&gt; &quot;&#160; $3}&#8217;</font></p>
</blockquote>
<p>tr –&gt; permet de remplacer le séparateur ‘:’ par une tabulation ‘\t’</p>
<p>awk &#8216;{print $1 &quot;&#8211;&gt; &quot;&#160; $3}&#8217; –&gt; permet d’afficher la premiere colonne ($1) et la troisième ($3)</p>
<p>&#160;</p>
<p>voici un exemple de sortie :</p>
<blockquote>
<p><font face="Courier New">apache –&gt; 48</font></p>
</blockquote>
<p>Voici la même commande pour le fichier /etc/group :</p>
<blockquote>
<p><font face="Courier New">sort -t : -k 3 -g /etc/group |&#160; tr &#8216;:&#8217; &#8216;\t&#8217; | awk &#8216;{print $1 &quot;&#8211;&gt; &quot;&#160; $3}&#8217;</font></p>
</blockquote>
<p>&#160;</p>
<p>voilà, j’espère que ça vous aidera un jour ou l’autre.</p>
<p>++</p>
<p>Olivier</p>
<div class="shr-publisher-682"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2011%2F09%2Fclasser-le-fichier-passwd-par-uid%2F' data-shr_title='Classer+le+fichier+passwd+par+UID'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2011%2F09%2Fclasser-le-fichier-passwd-par-uid%2F' data-shr_title='Classer+le+fichier+passwd+par+UID'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2011/09/classer-le-fichier-passwd-par-uid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filtrer les erreurs php &#8211; Error_reporting</title>
		<link>http://www.croc-informatique.fr/2010/12/filtrer-les-erreurs-php-error_reporting/</link>
		<comments>http://www.croc-informatique.fr/2010/12/filtrer-les-erreurs-php-error_reporting/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 08:52:49 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[constante]]></category>
		<category><![CDATA[deprecated]]></category>
		<category><![CDATA[erreur]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2010/12/filtrer-les-erreurs-php-error_reporting/</guid>
		<description><![CDATA[Il est parfois nécessaire de filtrer les erreurs pour ne pas polluer les fichiers log de données récurrentes et non nécessaire. Par exemple, les erreurs Deprecated : [Mon Dec 20 16:09:36 2010] [error] [client 192.168.0.1] PHP Deprecated:&#160; Function ereg_replace() is deprecated in Cette erreur nous indique que l’application PHP utilise une fonction qui est en [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Il est parfois nécessaire de filtrer les erreurs pour ne pas polluer les fichiers log de données récurrentes et non nécessaire. </p>
<p>Par exemple, les erreurs Deprecated :</p>
<blockquote><p>[Mon Dec 20 16:09:36 2010] [error] [client 192.168.0.1] PHP Deprecated:&#160; Function ereg_replace() is deprecated in</p>
</blockquote>
<p>Cette erreur nous indique que l’application PHP utilise une fonction qui est en train de disparaitre.&#160; C’est très bien de le savoir lorsqu’on développe. Mais pour débugger, c’est l’enfer. </p>
<p>Heureusement, php a prévu le coup. Dans php.ini, il y a un champ nommé “error_reporting” initialisé par défaut sur E_ALL ( Toutes les erreurs).</p>
<p>&#160;</p>
<p><span id="more-641"></span></p>
<p>Voici la valeur de error_reporting dans le cas où nous voulons tous les logs sauf les messages E_Notice et E_DEPRECATED :</p>
<blockquote><p>error_reporting = E_ALL &amp; ~E_DEPRECATED &amp; ~E_NOTICE</p>
</blockquote>
<p>Le ~ représente la négation.</p>
<p>&#160;</p>
<p>Nous pouvons faire la même chose directement dans l’application avec la fonction :</p>
<blockquote><p>int <b>error_reporting</b> ([ int <tt>$level</tt> ] )</p>
</blockquote>
<p>exemple :</p>
<blockquote><p align="left">error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);</p>
</blockquote>
<p>le ^ représente la négation.</p>
<pre>&#160;</pre>
<h3>Les différents niveaux d&#8217;erreur :</h3>
<p>Le type d&#8217;une erreur est représenté par une constante <abbr>PHP</abbr>.</p>
<p><strong>Valeur : 1&#160; Constante :</strong> <b><tt>E_ERROR</tt></b> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Les erreurs sont aussi affichées par défaut, et l&#8217;exécution du script est interrompue. Elles indiquent des erreurs qui ne peuvent pas être ignorées, comme des problèmes d&#8217;allocation de mémoire, par exemple.</p>
<p><strong>Valeur : 2 Constante :</strong> <b><tt>E_WARNING</tt></b> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Les alertes sont affichées par défaut, mais n&#8217;interrompent pas l&#8217;exécution du script. Elles indiquent un problème qui doit être intercepté par le script durant l&#8217;exécution du script. Par exemple, appeler <a href="http://www.php.net/manual/fr/function.ereg.php">ereg()</a> avec une expression rationnelle invalide.</p>
<p><strong>Valeur : 4 Constante : <tt>E_PARSE</tt></strong> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Les erreurs d&#8217;analyse ne doivent être générées que par l&#8217;analyseur. Elles ne sont citées ici que dans le but d&#8217;être exhaustif.</p>
<p><strong>Valeur : 8 Constante :</strong> <b><tt>E_NOTICE</tt></b> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Les remarques ne sont pas affichées par défaut, et indiquent que le script a rencontré quelque chose qui peut être une erreur, mais peut aussi être un événement normal dans la vie du script. Par exemple, essayer d&#8217;accéder à une valeur qui n&#8217;a pas été déclarée, ou appeler <a href="http://www.php.net/manual/fr/function.stat.php">stat()</a> sur un fichier qui n&#8217;existe pas.</p>
<p><strong>Valeur : 16 Constante :</strong> <b><tt>E_CORE_ERROR</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Elles sont similaires aux erreurs <b><tt>E_ERROR</tt></b>, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 32 Constante :</strong> <b><tt>E_CORE_WARNING</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Elles sont similaires à <b><tt>E_WARNING</tt></b>, mais elles sont générées par le code source de PHP. Les fonctions ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 64 Constante :</strong> <b><tt>E_COMPILE_ERROR</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Elles sont similaires à <b><tt>E_ERROR</tt></b>, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 128 Constante :</strong> <b><tt>E_COMPILE_WARNING</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Elles sont similaires à <b><tt>E_WARNING</tt></b>, mais elles sont générées par le moteur Zend. Les fonctions ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 256 Constante :</strong> <b><tt>E_USER_ERROR</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Message d&#8217;erreur généré par l&#8217;utilisateur. Comparable à <b><tt>E_ERROR</tt></b>. Elle est générée par le programmeur en PHP par l&#8217;utilisation de la fonction<a href="http://www.php.net/manual/fr/function.trigger-error.php">trigger_error()</a>. Les fonctions de PHP ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 512 Constante :</strong> <b><tt>E_USER_WARNING</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Message d&#8217;erreur généré par l&#8217;utilisateur. Comparable à <b><tt>E_WARNING</tt></b>. Elle est générée par le programmeur en PHP par l&#8217;utilisation de la fonction<a href="http://www.php.net/manual/fr/function.trigger-error.php">trigger_error()</a>. Les fonctions de PHP ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 1024 Constante :</strong> <b><tt>E_USER_NOTICE</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Message d&#8217;erreur généré par l&#8217;utilisateur. Comparable à <b><tt>E_NOTICE</tt></b>. Elle est générée par le programmeur en PHP par l&#8217;utilisation de la fonction<a href="http://www.php.net/manual/fr/function.trigger-error.php">trigger_error()</a>. Les fonctions de PHP ne doivent pas générer ce genre d&#8217;erreur.</p>
<p><strong>Valeur : 2048 Constante :</strong> <b><tt>E_STRICT</tt></b> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Permet d&#8217;obtenir des suggestions de PHP pour modifier votre code, assurant ainsi une meilleure interopérabilité et compatibilité de celui-ci. </p>
<p>Depuis PHP 5</p>
<p><strong>Valeur : 4096 Constante :</strong> <b><tt>E_RECOVERABLE_ERROR</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Erreur fatale qui peut être captée. Ceci indique qu&#8217;une erreur probablement dangereuse s&#8217;est produite, mais n&#8217;a pas laissé le moteur Zend dans un état instable. Si l&#8217;erreur n&#8217;est pas attrapée par un gestionnaire d&#8217;erreur défini par l&#8217;utilisateur (voyez aussi <a href="http://www.php.net/manual/fr/function.set-error-handler.php">set_error_handler()</a>, l&#8217;application arrête prématurément comme si cela était une <b><tt>E_ERROR</tt></b>. </p>
<p>Depuis PHP 5.2.0</p>
<p><strong>Valeur : 8192 Constante :</strong> <b><tt>E_DEPRECATED</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Alertes d&#8217;exécution. Activer cette option pour recevoir des alertes sur les portions de votre code qui pourraient ne pas fonctionner avec les futures versions. </p>
<p>Depuis PHP 5.3.0</p>
<p><strong>Valeur : 16384 Constante :</strong> <b><tt>E_USER_DEPRECATED</tt></b>(<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Message d&#8217;alerte généré par l&#8217;utilisateur. Fonctionne de la même façon que <b><tt>E_DEPRECATED</tt></b>, mise à part que le message est généré par votre code PHP en utilisant la fonction <a href="http://www.php.net/manual/fr/function.trigger-error.php">trigger_error()</a>. </p>
<p>Depuis PHP 5.3.0</p>
<p><strong>Valeur : 30719 Constante :</strong> <b><tt>E_ALL</tt></b> (<a href="http://www.php.net/manual/fr/language.types.integer.php">entier</a>) </p>
<p>Toutes les erreurs et alertes supportées sauf le niveau <b><tt>E_STRICT</tt></b>. </p>
<p>30719 en PHP 5.3.x, 6143 en PHP 5.2.x, et 2047 auparavant</p>
<div class="shr-publisher-641"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F12%2Ffiltrer-les-erreurs-php-error_reporting%2F' data-shr_title='Filtrer+les+erreurs+php+%26ndash%3B+Error_reporting'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F12%2Ffiltrer-les-erreurs-php-error_reporting%2F' data-shr_title='Filtrer+les+erreurs+php+%26ndash%3B+Error_reporting'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/12/filtrer-les-erreurs-php-error_reporting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cr&#233;er un fichier d&#8217;une taille d&#233;finie</title>
		<link>http://www.croc-informatique.fr/2010/12/crer-un-fichier-dune-taille-dfinie/</link>
		<comments>http://www.croc-informatique.fr/2010/12/crer-un-fichier-dune-taille-dfinie/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 07:21:20 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[fichier]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[taille]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2010/12/crer-un-fichier-dune-taille-dfinie/</guid>
		<description><![CDATA[Pour certains tests, il peut être utile de créer des fichiers d’une taille précise. Pour cela, nous pouvons utiliser la commande dd : dd if=/dev/zero of=5M bs=1k count=5 Ici, nous allons créer un fichier nommé 5M qui aura la taille de 1000 blocks de 1Ko * 5. C’est à dire 5M. Le fichier créé sera [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Pour certains tests, il peut être utile de créer des fichiers d’une taille précise. Pour cela, nous pouvons utiliser la commande <b>dd</b> :</p>
<blockquote><pre>dd if=/dev/zero of=5M bs=1k count=5</pre>
</blockquote>
<p>Ici, nous allons créer un fichier nommé 5M qui aura la taille de 1000 blocks de 1Ko * 5. C’est à dire 5M.</p>
<p>Le fichier créé sera rempli de 0.</p>
<div class="shr-publisher-640"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F12%2Fcrer-un-fichier-dune-taille-dfinie%2F' data-shr_title='Cr%26eacute%3Ber+un+fichier+d%26rsquo%3Bune+taille+d%26eacute%3Bfinie'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F12%2Fcrer-un-fichier-dune-taille-dfinie%2F' data-shr_title='Cr%26eacute%3Ber+un+fichier+d%26rsquo%3Bune+taille+d%26eacute%3Bfinie'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/12/crer-un-fichier-dune-taille-dfinie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tracer les pertes de paquets d&#8217;un ping dans un fichier texte</title>
		<link>http://www.croc-informatique.fr/2010/10/tracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte/</link>
		<comments>http://www.croc-informatique.fr/2010/10/tracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 07:55:23 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[bat]]></category>
		<category><![CDATA[coupures]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2010/10/tracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte/</guid>
		<description><![CDATA[Suite à un problème de coupures intermittentes que j’ai eu avec un lien d’un site distant, j’ai trouvé un petit bat permettant de faire un ping toutes les 4 s et de tracer les pertes de paquets. Voici le contenu de mon fichier .bat : @echo off echo Ping vers 192.168.0.1 en cours echo NE [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Suite à un problème de coupures intermittentes que j’ai eu avec un lien d’un site distant, j’ai trouvé un petit bat permettant de faire un ping toutes les 4 s et de tracer les pertes de paquets.</p>
<p>Voici le contenu de mon fichier .bat :</p>
<blockquote><p> @echo off     <br /> echo Ping vers 192.168.0.1 en cours      <br /> echo NE PAS FERMER LA FENETRE</p>
<p> rem Délai en secondes     <br /> set delay=1</p>
<p> echo Etat du réseau du Site distant &gt;&#160; trace.txt     <br /> echo ============================ &gt;&gt; trace.txt</p>
<p> :loop</p>
<p><span id="more-634"></span></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ping.exe -n 1 192.168.0.1 | findstr &quot;demande&quot; &gt; NUL     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if %errorlevel% == 0 echo Pertes de paquets vers 192.168.0.1 %date% %time:~,8% &gt;&gt; trace.txt      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160; rem Attendre      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ping.exe -n %delay% 127.0.0.1 &gt; NUL</p>
<p>goto loop</p>
</blockquote>
<p>L’adresse IP du hôte distant est ici : 192.168.0.1</p>
<p>Le fichier de sortie est : trace.txt</p>
<p>&#160;</p>
<p>Avec ce script on peut détecter des pertes qui ne sont pas visibles par Nagios (check toutes les 5min) et par Cacti. De plus, on est pas obligé de resté devant le ping –t afin de scruter les pertes.</p>
<div class="shr-publisher-634"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F10%2Ftracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte%2F' data-shr_title='Tracer+les+pertes+de+paquets+d%26rsquo%3Bun+ping+dans+un+fichier+texte'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F10%2Ftracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte%2F' data-shr_title='Tracer+les+pertes+de+paquets+d%26rsquo%3Bun+ping+dans+un+fichier+texte'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/10/tracer-les-pertes-de-paquets-dun-ping-dans-un-fichier-texte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[MISE A JOUR] Synchroniser et superviser VULTURE</title>
		<link>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/</link>
		<comments>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:40:40 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projet]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[reverse]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[supervision]]></category>
		<category><![CDATA[synchronisation]]></category>
		<category><![CDATA[Vulture]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/</guid>
		<description><![CDATA[Après avoir ajouté des interfaces à mes serveurs Vulture pour prendre en charge mes certificats SSL par domaine, j’ai du mettre à jour mes scripts de synchronisation et de supervision. Pour rappel, la première version ainsi qu’une doc explicative se trouve à cette adresse : http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/ J’en ai profité pour remanier un peu mon code [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Après avoir ajouté des interfaces à mes serveurs Vulture pour prendre en charge mes certificats SSL par domaine, j’ai du mettre à jour mes scripts de synchronisation et de supervision. Pour rappel, la première version ainsi qu’une doc explicative se trouve à cette adresse : <a title="http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/" href="http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/">http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/</a></p>
<p>J’en ai profité pour remanier un peu mon code pour qu’il soit plus exploitable par tous. J’espère que ça servira à quelqu’un.</p>
<h3>Attention :</h3>
<p><span id="more-620"></span></p>
<p>J’ai transformé le script permettant la supervision de la synchronisation du shell en perl. Donc, à présent, il faut mettre dans le fichier /etc/sudoers la ligne :</p>
<blockquote><p>nagios   ALL = NOPASSWD: /usr/bin/perl /usr/lib/nagios/plugins/check_synchro_vulture.pl</p></blockquote>
<p>Au lieu de :</p>
<blockquote><p>nagios   ALL = NOPASSWD: /bin/sh /usr/local/nagios/libexec/check_synchro_vulture.sh</p></blockquote>
<p>Modifier également la commande utilisé par Nagios.</p>
<p>La supervision des sites Web hébergés a également changée. La commande s’exécute de cette manière :</p>
<blockquote><p>./check_vulture.pl -H 192.168.0.1</p></blockquote>
<p>Il vous faudra modifier les constantes dans la plupart des scripts.</p>
<p>Vous pouvez télécharger la dernière version <a href="http://crocodanser.free.fr/fichiers/synchro-vulture-072010.zip" target="_blank">ici</a></p>
<p>Mot de passe de l&#8217;archive : http://www.croc-informatique.fr</p>
<div class="shr-publisher-620"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmise-a-jour-synchroniser-et-superviser-vulture%2F' data-shr_title='%5BMISE+A+JOUR%5D+Synchroniser+et+superviser+VULTURE'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmise-a-jour-synchroniser-et-superviser-vulture%2F' data-shr_title='%5BMISE+A+JOUR%5D+Synchroniser+et+superviser+VULTURE'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Nagios] Visualiser la commande exécutée par Nagios</title>
		<link>http://www.croc-informatique.fr/2010/07/nagios-visualiser-la-commande-executee-par-nagios/</link>
		<comments>http://www.croc-informatique.fr/2010/07/nagios-visualiser-la-commande-executee-par-nagios/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:38:47 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Outils]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[commande]]></category>
		<category><![CDATA[debuggage]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/?p=609</guid>
		<description><![CDATA[J’ai passé la journée à rechercher pourquoi mon event handler ne voulait pas fonctionner. J’avais l’impression que certaines macros ne fonctionnaient pas. Mais sur Nagios, comment pouvons nous voir la commande qu’il exécute avec les valeurs des arguments? Et bien, la solution est ici : http://www.waggy.at/nagios/capture_plugin.htm Sur ce site, vous allez trouvez un plugin perl [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>J’ai passé la journée à rechercher pourquoi mon event handler ne voulait pas  fonctionner. J’avais l’impression que certaines macros ne fonctionnaient pas.  Mais sur Nagios, comment pouvons nous voir la commande qu’il exécute avec les  valeurs des arguments?</p>
<p>Et bien, la solution est ici : <a title="http://www.waggy.at/nagios/capture_plugin.htm" href="http://www.waggy.at/nagios/capture_plugin.htm">http://www.waggy.at/nagios/capture_plugin.htm</a></p>
<p>Sur ce site, vous allez trouvez un plugin perl qui est téléchargeable ici :  <a title="http://www.waggy.at/nagios/capture_plugin.txt" href="http://www.waggy.at/nagios/capture_plugin.txt">http://www.waggy.at/nagios/capture_plugin.txt</a></p>
<h3></h3>
<p><span id="more-609"></span></p>
<p>&nbsp;
<p />
<h3>Installation et configuration du plugin</h3>
<p>&nbsp;
<p />
Vous pouvez le placer avec vos autres plugins, le renommer en  capture_plugin.pl et lui donner les bons droits.</p>
<p>L’emplacement du fichier log est défini dans cette variable :</p>
<blockquote><p>my $LOG_FILE = &laquo;&nbsp;/tmp/captured-plugins.log&nbsp;&raquo;;</p></blockquote>
<h3></h3>
<p>&nbsp;
<p />
<h3>Utilisation du plugin</h3>
<p>&nbsp;
<p />
Si la commande que vous voulez debugger est la suivante :</p>
<blockquote><p>$USER1$/check_nrpe -H $HOSTADDRESS$ -c restart_service -a $SERVICESTATE$  $SERVICESTATETYPE$ $SERVICEATTEMPT$ &laquo;&nbsp;$ARG1$&nbsp;&raquo;</p></blockquote>
<p>Il vous suffi de la modifier en ajoutant le plugin comme ceci :</p>
<blockquote><p><strong>$USER1$/capture_plugin.pl</strong> $USER1$/check_nrpe -H  $HOSTADDRESS$ -c restart_service -a $SERVICESTATE$ $SERVICESTATETYPE$  $SERVICEATTEMPT$ &laquo;&nbsp;$ARG1$&nbsp;&raquo;</p></blockquote>
<p>Voilà, il ne vous reste plus qu’à tester et vérifier que votre commande est  bien lancée dans le fichier log.</p>
<h3></h3>
<p></p>
<h3>Exemple de fichier log :</h3>
<p>&nbsp;
<p />
Voici un exemple de log :</p>
<blockquote><p>2010-6-21 16:32:29 &#8212;&#8212; debugging<br />
cmd=[/usr/lib/nagios/plugins/check_nrpe '-H' '192.168.0.1' '-c'  'restart_service' '-a' 'OK' 'HARD' '4' 'mon service']<br />
output=[Restarting mon  service (3rd soft critical state)<br />
]<br />
retcode=0</p></blockquote>
<ul>
<li>cmd –&gt; Commande lancée par Nagios</li>
<li>output –&gt; retour de la commande check_nrpe</li>
<li>retcode –&gt; Code retour de la commande check_nrpe</li>
</ul>
<p>Si vous avez d’autres solutions, n’hésitez pas <img src='http://www.croc-informatique.fr/wp-includes/images/smilies/icon_wink.gif' alt="icon wink [Nagios] Visualiser la commande exécutée par Nagios" class='wp-smiley' title="[Nagios] Visualiser la commande exécutée par Nagios" />  J’ai essayé le mode debug,  mais ça n’a pas trop fonctionné. En même temps, j’ai pas cherché beaucoup…</p>
<h3></h3>
<p>&nbsp;
<p />
<h3>Code Sources :</h3>
<p>&nbsp;
<p />
Au cas où, je mets la source :</p>
<blockquote>
<pre>#!/usr/bin/perl -w
#
# Written 2007-03-24 by Wolfgang Wagner (aka wolle)
#
# $id: capture_plugin.pl v1.0
#
# Captures stdout&amp;stderr in a file and returns orginial results to Nagios (http://www.nagios.org)
#
# Copyright 2007 by Wolfgang Wagner. All rights reserved.
#
# This software is licensed under the terms of the GNU General Public License Version 2
# as published by the Free Software Foundation.
# It is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN,
# MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
#
# Check out http://www.waggy.at for possible future versions.
#

use strict;

# This plugin does not need any nagios utils. It just interfaces the original plugin.

my $LOG_FILE = "/tmp/captured-plugins.log";

my ($cmd, $ret_code, $output);
# First display all arguments
my ($numArgs, $argnum);
$numArgs = $#ARGV + 1;

# create the command-line

$cmd = $ARGV[0];
foreach $argnum (1 .. $#ARGV) {
  $cmd = $cmd . " '" . $ARGV[$argnum] . "'"
}

# prepare debug-output
# ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(time);
my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset) = localtime(time);
my $year = 1900 + $yearOffset;
my $theTime = " $year-$month-$dayOfMonth $hour:$minute:$second";
# now execute the command

$output = `$cmd 2&gt;&amp;1`;
$ret_code = $?&gt;&gt;8;

# log the start, output, retcode &amp; end

my $LogFile;
# open could be better: check success later; if unsuccessful return UNKNWON to Nagios
open (LogFile, "&gt;&gt;$LOG_FILE") || die ("Cannot open logfile");
print LogFile "$theTime ------ debugging\ncmd=[$cmd]\noutput=[$output]\nretcode=$ret_code\n-------\n";
close(LogFile);
# avoid access problems for others.
chmod 0777, $LOG_FILE;

# now return the original resutlt to Nagios
print $output;
exit "$ret_code";</pre>
</blockquote>
<div class="shr-publisher-609"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fnagios-visualiser-la-commande-executee-par-nagios%2F' data-shr_title='%5BNagios%5D+Visualiser+la+commande+ex%C3%A9cut%C3%A9e+par+Nagios'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fnagios-visualiser-la-commande-executee-par-nagios%2F' data-shr_title='%5BNagios%5D+Visualiser+la+commande+ex%C3%A9cut%C3%A9e+par+Nagios'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/07/nagios-visualiser-la-commande-executee-par-nagios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[VBS] Supprimer les fichiers d’un repertoire en fonction de leur date de modification</title>
		<link>http://www.croc-informatique.fr/2009/11/vbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification/</link>
		<comments>http://www.croc-informatique.fr/2009/11/vbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 13:26:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[automatiquement]]></category>
		<category><![CDATA[nettoyage]]></category>
		<category><![CDATA[supprimer]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2009/11/vbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification/</guid>
		<description><![CDATA[Voici un script écrit en VBS qui permet de nettoyer un répertoire. Ce script est équivalent à la commande linux : find /rep –mtime +5 –exec rm –f {} \; Voici le script : &#8216;Les declarations &#8216;Repertoire ou sont stockes les fichiers DossierSauvegarde = &#34;C:\TEST\&#34; &#8216;Nombre de jours de conservation des Fichiers AgeMaximalFichiers = &#34;30&#34; [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Voici un script écrit en VBS qui permet de nettoyer un répertoire. Ce script est équivalent à la commande linux :</p>
<blockquote><p>find /rep –mtime +5 –exec rm –f {} \;</p>
</blockquote>
<p>Voici le script :</p>
<blockquote><p>&#8216;Les declarations      <br />&#8216;Repertoire ou sont stockes les fichiers       <br />DossierSauvegarde = &quot;C:\TEST\&quot;       <br />&#8216;Nombre de jours de conservation des Fichiers       <br />AgeMaximalFichiers = &quot;30&quot;       <br />&#8216;Comptage des fichiers effaces       <br />NbFichiersEffaces = 0       <br />&#8216;Initialisation des objets       <br />Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot; )       <br />&#8216;On verifie que le repertoire de sauvegarde existe       <br />If (myName = Winrep = fso.FolderExists(DossierSauvegarde)) = False Then       <br />&#160;&#160;&#160; Erreur = MsgBox(&quot;Le dossier de sauvegarde est introuvable !&quot; )       <br />&#160;&#160;&#160; Wscript.Quit       <br />End If       <br />&#8216;On recupere la date systeme       <br />DateSysteme = Date       <br />&#8216;On apelle la fonction d&#8217;effacement       <br />Clean(DossierSauvegarde)       <br />&#8216;Fonction d&#8217;effacement des fichiers       <br />Sub Clean(FolderPath)       <br />Set Folder = fso.Getfolder(FolderPath)       <br />&#8216;On appelle recursivement la fonction s&#8217;il y a des sous dossiers       <br />Set SubFolder = Folder.SubFolders       <br />&#160;&#160; For Each CurrentFolder in SubFolder       <br />&#160;&#160;&#160;&#160;&#160; Clean CurrentFolder.Path       <br />&#160;&#160; Next       <br />&#8216;On efface les fichiers dans le dossier courant       <br />For Each File In Folder.Files       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; If (DateDiff(&quot;d&quot;, File.DateLastModified, DateSysteme) &gt; CInt(AgeMaximalFichiers)) Then       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;On verifie qu&#8217;ils ne sont pas en lecture seule       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; If File.Attributes And 1 Then File.Attributes = File.Attributes &#8211; 1       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; File.Delete()       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; NbFichiersEffaces = NbFichiersEffaces + 1       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; End If       <br />Next       <br />End Sub       <br />&#8216;On affiche un joli message       <br />MsgBox (Cstr(NbFichiersEffaces) + &quot; fichiers ont ete effaces&quot; )</p>
</blockquote>
<p>Il faut indiquer le dossier à nettoyer (DossierSauvegarde) et la durée de rétention (AgeMaximalFichiers). </p>
<p><span id="more-459"></span></p>
<p>J’ai trouvé ce script sur <a title="http://forum.hardware.fr/hfr/WindowsSoftware/Logiciels/suppression-fichiers-fonction-sujet_247096_1.htm" href="http://forum.hardware.fr/hfr/WindowsSoftware/Logiciels/suppression-fichiers-fonction-sujet_247096_1.htm">http://forum.hardware.fr/hfr/WindowsSoftware/Logiciels/suppression-fichiers-fonction-sujet_247096_1.htm</a></p>
<div class="shr-publisher-459"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F11%2Fvbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification%2F' data-shr_title='%5BVBS%5D+Supprimer+les+fichiers+d%E2%80%99un+repertoire+en+fonction+de+leur+date+de+modification'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F11%2Fvbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification%2F' data-shr_title='%5BVBS%5D+Supprimer+les+fichiers+d%E2%80%99un+repertoire+en+fonction+de+leur+date+de+modification'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2009/11/vbs-supprimer-les-fichiers-dun-repertoire-en-fonction-de-leur-date-de-modification/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Plugin Nagios] Supervision des erreurs sur les interfaces des équipements réseau</title>
		<link>http://www.croc-informatique.fr/2009/07/plugin-nagios-supervision-des-erreurs-sur-les-interfaces-des-quipements-rseau/</link>
		<comments>http://www.croc-informatique.fr/2009/07/plugin-nagios-supervision-des-erreurs-sur-les-interfaces-des-quipements-rseau/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 15:29:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Outils]]></category>
		<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/?p=430</guid>
		<description><![CDATA[Suite à des problèmes que j’ai rencontré, j’ai décidé de superviser les interfaces de mes équipements réseau. Je n’ai pas trouvé de plugin de ce type donc j’en ai créé un. Mon plugin n’est pas du tout optimisé car je ne suis pas un grand développeur (même plutôt un débutant). je viens juste de le [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Suite à des problèmes que j’ai rencontré, j’ai décidé de superviser les interfaces de mes équipements réseau. Je n’ai pas trouvé de plugin de ce type donc j’en ai créé un.</p>
<p>Mon plugin n’est pas du tout optimisé car je ne suis pas un grand développeur (même plutôt un débutant). je viens juste de le mettre en prod donc il est peut-être bugger.</p>
<p>Ce plugin ne gère pas les différentes version d’SNMP. A vous de l’adapter.</p>
<h3>Information sur le plugin :</h3>
<p>Celui-ci va récupérer via SNMP des compteurs. Le problème des équipements Cisco est qu’on ne peut pas réinitialiser les compteurs SNMP. Donc j’ai dû faire un système de mémorisation puis de comparaison pour ne pas avoir des alertes constamment dans mon interface Nagios. De cette manière, une erreur critique apparaît seulement lorsque l’un des compteurs est superieur au check précédent.<span id="more-430"></span></p>
<h4>Erreurs supervisées par le plugin :</h4>
<p>· Input Errors : Erreur sur l’interface en entrée</p>
<p>· Output Errors : Erreur sur l’interface en sortie</p>
<p>· Input Discards : Problème de buffer en entrée</p>
<p>· Output Discards : Problème de buffer en sortie</p>
<h4>Emplacement du script :</h4>
<p>/usr/local/nagios/libexec/check_io_error.pl</p>
<p>Ce script doit avoir les droits 755.</p>
<h4>Mémorisation :</h4>
<p>Pour mémoriser, au premier check avec des erreurs, je créé un fichier de ce type pour l’interface:</p>
<blockquote><p>Fa0/1:0:155:0:0</p></blockquote>
<p>Ce fichier sera créé dans /tmp (modifiable dans le script)</p>
<h4>Utilisation :</h4>
<p>./check_io_error.pl -C public -HOSTADDRESS IP_Equipement</p>
<h4>Commande Nagios :</h4>
<p>$USER1$/check_io_error.pl -HOSTADDRESS $HOSTADDRESS$ -C $ARG1$ -cr $ARG2$</p>
<h4>Code de sortie:</h4>
<p>Les erreurs critiques :</p>
<p><strong>**CRITICAL** :Fa6/0/1 :ifInDiscards=0, Fa6/0/1 :ifInErrors=58365499, Fa6/0/1 :ifOutDiscards=0, Fa6/0/1 :ifoutErrors=0, </strong></p>
<p>Cette erreur montre que depuis le dernier check, il y’a eu des erreurs en entrée sur l’interface Fa6/0/1</p>
<h5>Les sorties sans erreur :</h5>
<p><strong>OK : PAS DE PROBLEME</strong> : Cela veut dire qu’il n’y a jamais eu d’erreur sur les interfaces de cet équipement.</p>
<p><strong>OK : PAS DE NOUVELLES ERREURS</strong> : Cela veut dire qu’il y a déjà eu des erreurs dans le passé mais il n’y a pas d’erreur depuis</p>
<h4>Réinitialiser les compteurs après résolution du problème</h4>
<p>Pour réinitialiser les compteurs, il suffi de supprimer le fichier correspondant à l’interface en erreur dans le répetoire /tmp</p>
<p>Se répertoire peut être redéfini au début du plugin.</p>
<h3>Téléchargement :</h3>
<p>Vous pouvez le télécharger <a href="http://crocodanser.free.fr/fichiers/check_io_errors.zip" target="_blank">ici</a>.</p>
<h4>Troubleshooting :</h4>
<p><a href="http://www.cisco.com/en/US/products/hw/switches/ps700/products_tech_note09186a008015bfd6.shtml#l3_l2">http://www.cisco.com/en/US/products/hw/switches/ps700/products_tech_note09186a008015bfd6.shtml#l3_l2</a></p>
<div class="shr-publisher-430"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Fplugin-nagios-supervision-des-erreurs-sur-les-interfaces-des-quipements-rseau%2F' data-shr_title='%5BPlugin+Nagios%5D+Supervision+des+erreurs+sur+les+interfaces+des+%C3%A9quipements+r%C3%A9seau'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Fplugin-nagios-supervision-des-erreurs-sur-les-interfaces-des-quipements-rseau%2F' data-shr_title='%5BPlugin+Nagios%5D+Supervision+des+erreurs+sur+les+interfaces+des+%C3%A9quipements+r%C3%A9seau'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2009/07/plugin-nagios-supervision-des-erreurs-sur-les-interfaces-des-quipements-rseau/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Trucs perl -2</title>
		<link>http://www.croc-informatique.fr/2009/07/trucs-perl-2/</link>
		<comments>http://www.croc-informatique.fr/2009/07/trucs-perl-2/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 10:41:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2009/07/trucs-perl-2/</guid>
		<description><![CDATA[Remplacer un caractère ou une chaine dans une chaine : $chaine =~ s/\//-/g; Ici on remplace “/” par “–” dans l’ensemble de la chaine grâce à l’option “g”. “/” étant un caractère interprété par perl, il faut mettre un “\” devant. Cette expression fonctionne également pour remplacer une chaine dans la chaine. exemple : $chaine=”Bonjour [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h3>Remplacer un caractère ou une chaine dans une chaine :</h3>
<blockquote><p>$chaine =~ s/\//-/g; </p>
</blockquote>
<p>Ici on remplace “/” par “–” dans l’ensemble de la chaine grâce à l’option “g”. “/” étant un caractère interprété par perl, il faut mettre un “\” devant.</p>
<p>Cette expression fonctionne également pour remplacer une chaine dans la chaine.</p>
<p><u>exemple :</u></p>
<blockquote><p><span id="more-429"></span></p>
<p>$chaine=”Bonjour je m’appel Olivier”;</p>
<p>$chaine =~ s/olivier/jean/g;</p>
<p>$chaine contient alors&#160; “Bonjour je m’appel jean”;</p>
</blockquote>
<h3>Ouvrir et Fermer un fichier :</h3>
<blockquote><p>open FILE, &quot;&gt; mon_fichier.txt&quot; or die &quot;Impossible d’ouvrir mon_fichier.txt”;      <br />close FILE;</p>
</blockquote>
<p>Le fait d’ouvrir un fichier, le créé automatiquement.</p>
<p>&#160;</p>
<h3>Lire un fichier ligne par ligne :</h3>
<blockquote><p>open (FILE2, &quot;$nom_fichier&quot;) or die &quot;Can&#8217;t open &quot;.$nom_fichier ;      <br />while ($ligne = &lt;FILE2&gt;) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print $ligne;       <br />}       <br />close FILE2;</p>
</blockquote>
<p>&#160;</p>
<h3>Ecrire dans un fichier :</h3>
<blockquote><p>open FILE, &quot;&gt; mon_fichier.txt&quot; or die &quot;mpossible d’ouvrir mon_fichier.txt”;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; print FILE $contenu_fichier;       <br />close FILE;</p>
</blockquote>
<p>Ici, on écrit le contenu de la variable $contenu_fichier dans le fichier “mon_fichier.txt”.</p>
<p>&#160;</p>
<h3>Parser une chaine :</h3>
<blockquote><p>$chaine=”8:5:6:5:4”;</p>
<p>@tableau = split(/:/, $chaine);</p>
</blockquote>
<p>Cette fonction permet de décomposer la chaine en utilisant les séparations “&#8217;:”.</p>
<p>&#160;</p>
<p>Voici le contenu du tableau @tableau :</p>
<table border="1" cellspacing="0" cellpadding="2" width="100">
<tbody>
<tr>
<td valign="top" width="98">8</td>
</tr>
<tr>
<td valign="top" width="98">5</td>
</tr>
<tr>
<td valign="top" width="98">6</td>
</tr>
<tr>
<td valign="top" width="98">5</td>
</tr>
<tr>
<td valign="top" width="98">4</td>
</tr>
</tbody>
</table>
<div class="shr-publisher-429"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Ftrucs-perl-2%2F' data-shr_title='Trucs+perl+-2'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Ftrucs-perl-2%2F' data-shr_title='Trucs+perl+-2'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2009/07/trucs-perl-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trucs Perl</title>
		<link>http://www.croc-informatique.fr/2009/07/trucs-perl/</link>
		<comments>http://www.croc-informatique.fr/2009/07/trucs-perl/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 06:54:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2009/07/trucs-perl/</guid>
		<description><![CDATA[Tailles d’un tableau à 2 dimensions : # nombre de lignesmy $nbr_lignes = @MonTableau_2D;&#160;&#160; # nombre de colonnes de la ligne 0 my $nbr_colonnes = @{$MonTableau_2D[0]}; Boucle for : Le Perl dispose de la structure for, qui est une copie de celle du C. for (initialisation; test; incrémentation) { première action; deuxième action; etc... }&#160; [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h3>Tailles d’un tableau à 2 dimensions :</h3>
<pre># nombre de lignesmy $nbr_lignes = @MonTableau_2D;&#160;&#160; # nombre de colonnes de la ligne 0</pre>
<p>my $nbr_colonnes = @{$MonTableau_2D[0]}; </p>
<h3>Boucle for :</h3>
<p>Le Perl dispose de la structure for, qui est une copie de celle du C.</p>
<pre>for (<em>initialisation</em>; <em>test</em>; <em>incrémentation</em>)
{
	<em> première action;</em>
	<em> deuxième action;</em>
	<em> etc...</em>
}&#160; </pre>
<p>D&#8217;abord, <em>l&#8217;initialisation </em>est exécutée. Puis, tant que le test est vrai, le bloc d&#8217;action est exécuté. Après l&#8217;exécution du bloc, on effectue l&#8217;incrémentation. Voici un exemple de boucle for, qui affice tous les nombres de 0 à 9 :</p>
<pre>for ($i = 0; $i &lt; 10; ++$i) # commence à $i = 0
			    # Continue tant que $i &lt; 10
			    # Incrémente $i avant de répéter.
{
	print &quot;$i\n&quot;;
}</pre>
<p><span id="more-425"></span></p>
<p>&#160;</p>
<h3>Tests</h3>
<p>Les branchements suivant dépendent des tests binaires. En Perl, tout nombre non nul, et toute chaîne de caractère non vide est considéré comme vrai. 0 et &quot;&quot; (chaîne vide) sont considéré come vide. Voici quelques tests sur les nombres et chaînes.</p>
<pre>$a == $b		# Est-ce que $a est numericalement égal à $b?
		# N'utilisez jamais l'opérateur = (affectation).
$a != $b		#  Est-ce que $a est numericalement différent à  $b?
$a eq $b		#  Est-ce que la chaîne $a est égale à la chaîne $b?
$a ne $b		#  Est-ce que la chaîne $a est différent à la chaîne $b?&#160; </pre>
<p>On dispose aussi des opérateur logiques et, ou et non:</p>
<pre>($a &amp;&amp; $b)		# Est-ce que $a et $b sont vrai?
($a || $b)		# Est-ce que $a ou $b est vrai?
!($a)			# Est-ce que $a est faux?</pre>
<p>&#160;</p>
<h3>Hash :</h3>
<p>&#160;</p>
<p>Quand on a un hash de ce type la :</p>
<blockquote>
<p>%oid = (<br />
    <br />&#160;&#160; ifName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &quot;1.3.6.1.2.1.31.1.1.1.1&quot;, </p>
<p>&#160;&#160; ifInDiscards&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &quot;1.3.6.1.2.1.2.2.1.13&quot;, </p>
<p>&#160;&#160; ifInErrors&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &quot;1.3.6.1.2.1.2.2.1.14&quot;, </p>
<p>&#160;&#160; ifOutDiscards&#160;&#160;&#160; =&gt; &quot;1.3.6.1.2.1.2.2.1.19&quot;, </p>
<p>&#160;&#160; ifoutErrors&#160;&#160;&#160;&#160;&#160; =&gt; &quot;1.3.6.1.2.1.2.2.1.20&quot; </p>
<p>&#160;&#160; );</p>
</blockquote>
<p>Nous voulons récupérer la Description :</p>
<blockquote>
<p>@keys = <a href="http://perldoc.perl.org/functions/keys.html">keys</a> %oid;</p>
</blockquote>
<p><font face="Courier New"></font></p>
<p>Toutes les descriptions seront alors dans le tableau @keys.</p>
<p>Récupération des valeurs du hash :</p>
<blockquote>
<p>@values = <a href="http://perldoc.perl.org/functions/values.html">values</a> %ENV;</p>
</blockquote>
<div class="shr-publisher-425"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Ftrucs-perl%2F' data-shr_title='Trucs+Perl'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Ftrucs-perl%2F' data-shr_title='Trucs+Perl'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2009/07/trucs-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

