Un environnement différent
Cron transmet un ensemble minimal de variables d'environnement à vos travaux. Pour voir la différence, ajoutez un travail fictif comme ceci :
\* \* \* \* \* env > /tmp/env.output
Attendez /tmp/env.output
à créer, puis supprimez à nouveau le travail. Comparez maintenant le contenu de /tmp/env.output
avec la sortie de env
exécuté dans votre terminal habituel.
Un "gotcha" commun ici est le PATH
La variable d'environnement est différente. Peut-être que votre cron script utilise la commande somecommand
trouvé dans /opt/someApp/bin
que vous avez ajouté à PATH
en /etc/environment
? le cron ignore PATH
de ce fichier, donc l'exécution somecommand
de votre script échouera lorsqu'il sera exécuté avec cron, mais fonctionnera lorsqu'il sera exécuté dans un terminal. Il est intéressant de noter que les variables de /etc/environment
seront transmises aux tâches cron, mais pas les variables que cron définit lui-même, telles que PATH
.
Pour contourner ce problème, il suffit de définir votre propre PATH
au début du script. Ex.
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# rest of script follows
Certains préfèrent utiliser les chemins absolus pour toutes les commandes. Je ne le recommande pas. Considérez ce qui se passe si vous voulez exécuter votre script sur un système différent, et que sur ce système, la commande est en /opt/someAppv2.2/bin
à la place. Il faudrait passer par l'ensemble du script en remplaçant /opt/someApp/bin
avec /opt/someAppv2.2/bin
au lieu de simplement faire une petite modification sur la première ligne du script.
Vous pouvez également définir la variable PATH dans le fichier crontab, qui s'appliquera à toutes les tâches cron. Par exemple
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
15 1 * * * backupscript --incremental /home /root
16 votes
Vous devez fermer
crontab -e
pour que le cron prenne effet. Par exemple, en utilisant vim, j'édite le fichier et utilise:w
pour l'écrire mais le travail n'est pas ajouté à cron jusqu'à ce que je quitte aussi. Je ne verrai donc pas la tâche avant d'avoir:q
également.0 votes
Je pense que la meilleure façon de déboguer cron est de vérifier syslog et de trouver les problèmes.
0 votes
Dans mon cas, l'e-mail a été envoyé dans mon dossier SPAM, alors..... vérifier cela avant de passer des heures à déboguer :D
0 votes
Pannes d'électricité
0 votes
Veuillez vérifier celui-ci askubuntu.com/a/1223213/297387