web-dev-qa-db-fra.com

Le script cron ne fonctionne pas sur sudo

Je rencontre des problèmes pour appeler un script bash en tant que cronjob qui ne s'exécutera pas.

Voici pour éliminer certaines sources d'échec possibles:

  • J'ai édité le cron via Sudo crontab -e
  • Le script est censé s'exécuter tous les soirs à 4 heures du matin. La commande est donc 0 4 * * * bash ~/nightly_backup.sh
  • Le script se trouve dans /home/myuser/nightly_backup.sh
  • Le script s'exécute complètement et n'a besoin d'aucune saisie utilisateur
  • L'appeler manuellement via Sudo bash ~/nightly_backup.sh fonctionne très bien
  • Il y a une autre commande dans la crontab qui est programmée pour s'exécuter toutes les 5 minutes et qui fonctionne également (fswebcam -r ...)

Qu'est-ce que je fais mal?

De plus: en regardant aujourd'hui si le script a été exécuté, je vois le syslog qui dit ce qui suit:

Feb  7 04:00:01 localhost CRON[7767]: (root) CMD (bash ~/nightly_backup.sh)
Feb  7 04:00:01 localhost CRON[7764]: (CRON) info (No MTA installed, discarding output)
Feb  7 04:00:03 localhost CRON[7765]: (CRON) info (No MTA installed, discarding output)
  • Que signifie "pas de MTA installé, sortie rejetée"?
1
taiBsu

Le problème de base semble être: L’utilisation de ~, qui fait référence à la home de l’utilisateur actuel.

Plus de détails sur le problème:

  • Lorsque vous exécutez la commande manuellement, la valeur de ~ est /home/myuser (myuser home).
  • Lorsque vous exécutez la commande à l'aide de cron, la valeur de ~ est /root (root home).

Le fichier n'étant pas dans /root/nightly_backup.shcron ne peut pas l'exécuter.

Solution:

Remplacer:

0 4 * * * bash ~/nightly_backup.sh

Avec:

0 4 * * * /home/myuser/nightly_backup.sh

Notez que vous devez vous assurer que le script shell est exécutable en lançant la commande suivante (une fois):

chmod +x /home/myuser/nightly_backup.sh

Remarque: concernant votre autre question

Que signifie "pas de MTA installé, sortie rejetée"?

Il a été répondu ici

En bref: Cela se produit parce que vos tâches cron produisent une sortie, puis le démon cron tente de vous envoyer cette sortie par courrier électronique, alors que vous n'avez pas de courrier. service installé sur votre système.

Vous pouvez le résoudre par l’une des méthodes suivantes (plus d’informations dans ici )

  • Ignorer le message
  • Installer le serveur de messagerie
  • Rediriger la sortie du travail cron dans/dev/null
  • Réorientez la sortie du travail cron dans logger et vous la verrez dans les journaux syslog.
3
Yaron