Question cron s'exécute mais rien ne se passe


J'ai créé un script appelé "forward_email.sh" et défini les autorisations sur 777. Il contient la ligne suivante:

echo "It worked: $(date)" >> /home/noc/email.log

J'ai créé un job cron avec la ligne suivante:

*/5 * * * * /home/noc/forward_email.sh

Le problème est que le fichier "email.log" n'est jamais modifié. J'ai même défini les autorisations sur 666. Lorsque je lance le script manuellement, cela fonctionne parfaitement.

Le travail cron est exécuté selon le fichier "/var/log/cron.log".

Quelqu'un peut-il me diriger dans la bonne direction quant à ce qui pourrait aller de travers? Il s'agit d'une installation de machine virtuelle minimale d'Ubuntu Server 9.04 avec cron installé via apt-get.

METTRE À JOUR: J'ai fait une erreur très stupide. J'ai nommé mon script "forward_mail.sh". Je n'étais pas jusqu'à ce que j'ai installé des services de messagerie et obtenu le message d'erreur suivant de Cron que je découvre mon erreur.


4
2017-08-04 03:49


origine


N'est-ce pas plus comme ça .. question serverfault? - codingbear
Les utilisateurs utilisent cron. - Richard Hoskins
pouvez-vous fournir une sortie de crontab -l? - John T
crontab -l affiche la même ligne dans la question d'origine. - Joseph
Est-ce que /etc/cron.allow existe? - Richard Hoskins


Réponses:


Beaucoup de choses potentielles sur le dessus de ma tête.

Êtes-vous sûr que l'entrée crontab pointe vraiment vers votre script? Par exemple, si vous souhaitez exécuter un script tel que ~ noc / bin / script.sh, mais avoir une entrée comme / home / noc / bin / script (c.-à-d. une typo subtile) alors bien sûr cela ne fonctionnera pas. Je vérifie généralement mes entrées crontab en copiant la commande hors de crontab avec ma souris, puis en la collant dans une invite de commande, juste pour être sûr à 100% qu’elle va exécuter ce que je veux.

Votre script contient-il seulement la ligne indiquée? Habituellement, vous devez inclure quelque chose comme:

#!/bin/bash

... en haut de votre script pour le faire fonctionner.

Si c'est plus compliqué que la simple ligne, êtes-vous sûr la logique de programmation lui permettra d'exécuter cette ligne particulière?

Essayez de réduire votre script à

#!/bin/bash
echo "Bing!" >> /tmp/cronjob

... pour voir ce qui se passe. Si cela fonctionne, vous avez un problème de programmation dans votre script cron. Si cela échoue, vous avez un problème de cron.

Est-ce que l'utilisateur 'noc' est celui qui exécute le script? Dans la négative, êtes-vous sûr que l'utilisateur exécutant le script cron dispose d'un accès en lecture / écriture via / home / noc au fichier email.log?

Où est le message d'erreur de l'utilisateur exécutant le job cron? Un e-mail d'erreur est-il généré, puis envoyé quelque part que vous ne vous attendez pas à recevoir ou peut-être même supprimé? Essayez un cronjob de

#!/bin/bash
echo "Bing!"

... puis essayez de savoir où va le courrier électronique généré.

Est-ce que cron.deny et / ou cron.allow sont en jeu? Si /etc/cron.allow existe, alors l'utilisateur noc doit y figurer; si /etc/cron.deny existe. l'utilisateur noc doit ne pas y être inscrit. Sur RedHat, si ni cron.allow ni cron.deny n'existent, alors SEUL l'utilisateur root sera autorisé à utiliser cron.


6
2017-08-04 04:14



J'ai réduit mon script et rien ne se passe encore. L'utilisateur noc doit être le seul utilisateur exécutant le script car c'est le seul compte. Je n'ai pas de services de messagerie installés sur ce serveur. - Joseph
Euh ... Ubunto utilise-t-il cron.allow et cron.deny? - David Mackintosh
OK, vu votre mise à jour, content que vous ayez compris. - David Mackintosh


Cron s'exécute avec des variables d'environnement limitées, en particulier votre $PATH. Essayez de placer le chemin complet vers les fichiers binaires. Alors /home/noc/forward_email.sh devrait être:

/bin/echo "It worked: $(date)" >> /home/noc/email.log

Aussi, qu'est-ce que */5 faire au début de votre script?  */5 court une fois toutes les cinq minutes, 5 fonctionne une fois 5 minutes après chaque heure.

5    *   *   *    * /home/noc/forward_email.sh
#*   *   *   *    *  command to be executed
#-   -   -   -    -
#|   |   |   |    |
#|   |   |   |    +----- day of week (0 - 6) (Sunday=0)
#|   |   |   +------- month (1 - 12)
#|   |   +--------- day of month (1 - 31)
#|   +----------- hour (0 - 23)
#+------------- min (0 - 59)

Enfin, avez-vous édité et sauvegardé le crontab avec la commande suivante:

crontab -e

... où votre éditeur est choisi par la variable d'environnement $EDITOR?


5
2017-08-04 04:22



* / 5 passe toutes les 5 minutes. avoir juste 5 ans le courra une fois toutes les heures à 5 minutes après l'heure. - pgs
L'ajout du chemin complet n'a rien changé. J'ai créé la contrebande avec "crontab -e". L'éditeur est nano. - Joseph


echo "It worked: $(date)" >> /home/noc/email.log

Est-ce que /home/noc/email.log existe-t-il avant d'exécuter le script? Est-il accessible en écriture à l'utilisateur exécutant le job cron? Que se passe-t-il si vous le créez au préalable? par exemple.

touch /home/noc/email.log
chmod 666 /home/noc/email.log

1
2017-08-04 04:43



Non Oui. Même chose. - Joseph


Si vous avez des doutes sur votre script, placez la ligne ci-dessous en haut du script:

 #!/bin/bash -x

(si vous n'utilisez pas ce shell, mettez simplement le bon)

Démarrer le sous-shell avec le -x (e)Xplicit) qui exécutera le script entier en mode débogage. Les traces de chaque commande ainsi que ses arguments sont imprimés sur la sortie standard une fois les commandes développées mais avant leur exécution.


0
2017-12-21 18:33