Bonjour,
Voici un script qui fonctionne très bien en commande mais pas lorsqu'il est lancé du cron.
Le script teste simplement le service squid et le redémarre en cas de crash en envoyant une alerte mail.
Le problème est que quand il est lancé par cron il détecte tout le temps qu'il est mort, en gros il sait pas faire le "if [ $var = '']", mais en le lançant en direct avec "./check_squid.sh" ça fonctionne.
---------- Voici le code ---------------------
#!/bin/sh
var=`pidof squid`
echo "**********************" >> log_chksquid
date >> log_chksquid
echo PID Squid : pidof squid >> log_chksquid
echo $var >> log_chksquid
if [ -z $var ]; then
echo "Squid est mort" >> log_chksquid
service squid start
sleep 30
service squid status | mail -s "Attention le Squid vient d'être redémarré" monmail@domaine.com
echo "Le Squid a ete relance" >> log_chksquid
else echo "Le squid fonctionne correctement" >> log_chksquid
fi
---------- et le cron (toute les 5 min) ----------
*/5 * * * * /root/check_squid.sh 1>/dev/null 2>/dev/null
---------- et les droits du fichier ------------
-rwxr-xr-x 1 root root 1050 oct 1 13:26 check_squid.sh
Merci pour votre aide.
# je vois un problème ...
Posté par totof2000 . Évalué à 2. Dernière modification le 01 octobre 2014 à 14:37.
Ne serait-ce pas mieux un truc du genre var="$(pidof squid)" ou var=`pidof squid`?
A moins que la syntaxe wiki ait fait sauter les quotes …
Sinon, si je vais voir la page man de pidof :
tu réécris start-stop-daemon.
[^] # Re: je vois un problème ...
Posté par mika5083 . Évalué à 1.
Le wiki a fait sauter les quotes en effet j'ai bien mis comme toi.
Le truc bizarre est que le script fontionne très bien en ligne de commande ./ mais pas en cron.
Du coup j'ai modifié mon code sur le if avec -z pour tester la valeur vide au lieu de ='' mais ça ne change rien c'est juste plus propre.
# Contenu des logs
Posté par mika5083 . Évalué à 1.
Pour info les logs lorsque lancé via ./check_squid.sh
mer oct 1 14:48:20 CEST 2014
PID Squid : pidof squid
15862
Le squid fonctionne correctement
Le Squid a ete relance
… et les logs lorsque lancé par Cron
Wed Oct 1 14:49:01 CEST 2014
PID Squid : pidof squid
Squid est mort
Le Squid a ete relance
donc ça montre bien que le pidof n'est pas traité comme il faut via cron, je vais chercher de ce coté là avec tes remarques.
# PATH le chemin
Posté par yohann (site web personnel) . Évalué à 6.
il faut savoir qu'en général cron ne définit aucune variable d'environnement, et donc pas de path: et du coup:
lorsque ton script est lancé depuis un shell: pidof est trouvé dans le PATH mais pas lorsque le script est lancé depuis cron.
solution: utilise /usr/pidof au lieu de pidof.
je pense qu'un problème similaire existe pour tes log .
En règle générale: toujours utilisé des chemin absolus dans les script pour cron.
[^] # Re: PATH le chemin
Posté par mika5083 . Évalué à 1.
Super ça marche nickel, merci beaucoup Yohann
En effet j'ai ajouter le chemin absolus qui est /sbin/pidof sous Ubuntu.
C'est bon à savoir pour mes prochain Script.
Merci encore.
[^] # Re: PATH le chemin
Posté par yohann (site web personnel) . Évalué à 1.
en plus j'ai mis usr à la place de bin…
Mais bon l'idée principale est l’absence de path
# Monit
Posté par nanard . Évalué à 1.
Yop,
Salut, tu ne doit pas connaître Monit, qui permet exactement ce que tu cherche à faire.
Allez tous vous faire spéculer.
[^] # Re: Monit
Posté par mika5083 . Évalué à 1.
Non en effet je connaissais pas, je m'en vais tester aussi avec même si avec pidof c'est résolu, toujours bon à prendre.
Merci à tous.
PS: je trouve pas comment clôturer un sujet sur le forum.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.