J'ai 3 entrées cronjob (crontab -l
) la première entrée est un script Perl qui crée une sauvegarde LVM d'une machine virtuelle et les deux autres ne sont que des fichiers sh effectuant mysqldump
.
Cependant, j’ai édité crontab -e
en tant que racine (Sudo su
en premier) et c’est ma première entrée
# Run daily backup of my job at 3:15 [relation ä11]
15 3 * * * Perl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2
Bien, mais cela ne crée aucune sortie dans le répertoire de sauvegarde, ni aucune entrée dans les journaux cron. Dans les fichiers de journal cron, je n'ai trouvé que les entrées des autres travaux sh.
Mais lorsque je copie la commande Perl /opt/AUTO_BACKUP/virt-backup.pl --action=dump --date --vm=SERVER2
dans le terminal root, cela fonctionne comme un charme. Donc, depuis que je modifie crontab
en tant que racine, seul le bon utilisateur doit exécuter le travail. Et aussi aucune erreur dans le journal.
Remplacez l'entrée Perl
par path/to/Perl
. Souvent, des commandes telles que Perl
et python
sont réellement basées sur l’environnement et se trouvent dans votre PATH. Comme cron manque ce chemin, il est préférable d'utiliser des chemins absolus dans crontab.
La raison pour laquelle le script s'exécute lorsqu'elle est exécutée à partir du Shell, mais pas comme une tâche cron, est généralement l'env différent qu'il y trouve.
Changez donc votre travail cron pour enregistrer l’env, par exemple./tmp/env en utilisant
env | sort> /tmp/env
et quand/tmp/env arrive, diff le avec votre env actuel.
env | sort | diff - /tmp/env
HTH