Forum Programmation.shell script shell qui ne fonctionne pas à partir de crontab

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
1
oct.
2014

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  . Évalué à 2. Dernière modification le 01 octobre 2014 à 14:37.

    var=pidof squid

    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 :

    Pidof finds the process id's (pids) of the named programs. It prints those id's on the standard output. This program is on some systems used in run-level change scripts, especially when the system has a System-V like rc structure. In that case these scripts are located in /etc/rc?.d, where ? is the runlevel. If the system has a start-stop-daemon (8) program that should be used instead.

    tu réécris start-stop-daemon.

    • [^] # Re: je vois un problème ...

      Posté par  . É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  . É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  (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  . É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.

  • # Monit

    Posté par  . É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  . É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.