web-dev-qa-db-fra.com

L'exécution d'un script Perl en tant que travail cron ne fonctionne pas alors qu'un démarrage manuel effectue le travail

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.

1
TheMAn

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.

1
user323419

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

0
Georg Mavridis