Forum Linux.debian/ubuntu Question à propos d'une tâche cron

Posté par  (site web personnel) .
Étiquettes : aucune
0
15
août
2007
Bonjour,

J'ai mit une petite tâche cron sur un serveur (elle doit tourner chaque nuit). Ce qu'elle fait est simple : elle lance chkrootkit, récupère le résultat et si il y a un problème, elle m'envoie le résultat par mail. Le problème c'est qu'elle m'envoie un mail chaque jour qui contient juste :

::::::::::::::
chk_result
::::::::::::::

C'est d'autant plus étrange que si j'exécute moi même le script en console il ne m'envoie rien du tout.

Voici le script :

#!/bin/sh

if [ `whoami` != "root" ]
then
echo "Vous devez être root pour éxecuter ce script"
exit 1
fi
cd /etc/cron.daily/
/usr/sbin/chkrootkit -q -r / 2>&1 | grep -v "/usr/sbin/dhcpd" > chk_result
if [ `more chk_result | wc -l` -ne 0 ]
then
more chk_result | /opt/mailer/send_mail.php
fi
rm chk_result


Quelqu'un a une idée ?
  • # more ?

    Posté par  . Évalué à 3.

    Ta solution pour compter les lignes est un peu compliquée. De plus, more est normalement utilisé pour afficher le contenu page par page en interactif.

    A mon avis, si tu remplaçais
    `more chk_result | wc -l`
    par
    `wc -l < chk_result`
    ça devrait aller mieux.

    De même:
    more chk_result | /opt/mailer/send_mail.php
    se remplace simplement par:
    /opt/mailer/send_mail.php < chk_result
    • [^] # Re: more ?

      Posté par  . Évalué à 3.

      en tenant compte des precedentes remarques et de certaines petites modif,
      j'ecrirais le script comme cela


      #!/bin/sh

      TMPFILE=/tmp/chk_result

      if [ `whoami` != "root" ]
      then
      echo "Vous devez être root pour éxecuter ce script"
      exit 1
      fi
      cd /etc/cron.daily/
      /usr/sbin/chkrootkit -q -r / 2>&1 | grep -v "/usr/sbin/dhcpd" > $TMPFILE
      if [ `wc -l < $TMPFILE` -ne 0 ]
      then
      /opt/mailer/send_mail.php < $TMPFILE
      fi
      rm $TMPFILE


      sinon, il me semble qu'il n'est pas utile de passer par un mailer, le cron envoyant lui meme les sorties du script en email.
      • [^] # Re: more ?

        Posté par  . Évalué à 2.

        pour le mailer, je pense que l'on doit pouvoir faire :

        cat $TMPFILE | mail ton@email -s "resultat chkrootkit"

        Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

        • [^] # Re: more ?

          Posté par  (site web personnel) . Évalué à 1.

          En fait oui et non. Ta commande est correcte (je pense) mais elle nécessite la présence d'un MTA (pour la commande mail), c'est pour éviter cela que j'utilise le script send_mail.php
      • [^] # Re: more ?

        Posté par  (site web personnel) . Évalué à 1.

        Pour le mailer effectivement, sauf que ce script (send_mail.php) permet de se passer d'un mta (c'est pour ça que je l'utilise).

        Sinon j'ai repris tes modifications, malheureusement, vu que le problème ne se déclenche que lorsque la tâche cron s'exécute (non reproductible depuis la ligne de commande), je verrai demain en relevant mes mails si ça marche.

        Merci.
        • [^] # Re: more ?

          Posté par  . Évalué à 2.

          il suffit de changer la date d'action de la cron...

          genre toutes les 10 minutes

          et tu verras vite si ca marche ou pas.
          • [^] # Re: more ?

            Posté par  (site web personnel) . Évalué à 1.

            J'ai testé, ça marche pas. Je sais pas pourquoi il arrive pas à créer le fichier $TMPFILE alors que si je l'exécute en console ça marche. Pour info le kernel de la machine est une 19.2 avec grscecurity (je sais pas si ça influence).
            • [^] # Re: more ?

              Posté par  . Évalué à 1.

              1°) verifie que ton script ait les droits root.

              2°)verifie que ta ligne dans le crontab soit lancé par root

              * * * * * root /ton_chemin/ton_script
              • [^] # Re: more ?

                Posté par  (site web personnel) . Évalué à 1.

                1° Il a les droits root
                2° root n'était pas dans mon crontab mais visiblement ça n'as rien changé.
                Dans le syslog, il imprime ceci :

                Aug 16 11:04:01 localhost /USR/SBIN/CRON[6433]: (root) CMD (root /etc/cron.daily/analyse^M)
                Aug 16 11:04:01 localhost /USR/SBIN/CRON[6432]: (root) MAIL (mailed 33 bytes of output but got status 0x0001 )
                • [^] # Re: more ?

                  Posté par  . Évalué à 1.


                  Aug 16 11:04:01 localhost /USR/SBIN/CRON[6432]: (root) MAIL (mailed 33 bytes of output but got status 0x0001 )


                  apparemment il arrive jusqu'a la phase EMAIL et se bache pendant celle-ci

                  il ne reste plus qu'a trouver pourquoi et à quoi correspond le status 0x0001
                  • [^] # Re: more ?

                    Posté par  (site web personnel) . Évalué à 1.

                    En fait je n'ai pas installer de MTA sur cette machine. Donc la commande mail n'est pas disponible. Donc il est très probable que cron râle parce-qu'il ne parviens pas à envoyer de mail (forcement vu que la commande mail n'est pas dispo). Vu sous cet angle ma question serait alors : Comment faire pour que cron n'essaye pas d'envoyer de mail (modification de config je suppose) ?
                    • [^] # Re: more ?

                      Posté par  (site web personnel) . Évalué à 2.

                      En évitant toute sortie sur stderr et stdout, et en terminant le script avec un code de retour égal à 0.
                      • [^] # Re: more ?

                        Posté par  (site web personnel) . Évalué à 1.

                        J'ai ajouté le code de retour.
                        pour stderr et stdout, en fait le script php qui est appelé affichait quelque chose, donc maintenant je fait :

                        cat $TMPFILE | /opt/mailer/send_mail.php > /dev/null


                        Donc il ne devrait rien afficher et en console, si je le lance manuellement, il n'affiche effectivement rien. Mais toujours pas de mail dans mon inbox et il se viande toujours la gueule avec la même chose dans syslog.
                    • [^] # Re: more ?

                      Posté par  . Évalué à 1.

                      comment va faire ton script PHP pour envoyer un email si tu n'as pas de MTA ?

                      c'est quand meme la fonction meme de cron que de realiser des taches planifiées et d'en envoyer le resultat par email.
                      • [^] # Re: more ?

                        Posté par  (site web personnel) . Évalué à 1.

                        Comment il fait ça j'en sais rien. En fait j'ai juste trouver une librairie qui permet de se passer de MTA, donc elle doit gérer elle même la connexion SMTP et moi j'ai juste écrit un petit script en php-cgi pour exploiter la librairie.
                        • [^] # Re: more ?

                          Posté par  . Évalué à 1.

                          bonsoir

                          peut être que la soluce trouvée à un probleme quasi similaire te conviendra
                          (même message d'erreur et surtout mon script fonctionnait aussi en console mais pas en cron)

                          https://linuxfr.org/forums/15/22976.html

                          courage et bonne humeur
                          jcw

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.