web-dev-qa-db-fra.com

Comment définir un travail cron pour exécuter un script shell?

J'avais mis un travail cron:

20 * * * * /usr/bin/sh /home/lucky/myfile.sh

Le principal problème est qu’à l’heure prévue, il y a une erreur: "le courrier a été envoyé à/var/spool/mail/lucky".

Le contenu de myfile.sh est:

mkdir jh
cd jh 
41
Abhishek Tripathi

Ce n’est pas correct pour un script défini comme travail cron:

mkdir jh
cd jh 

Vous devez donner le chemin complet où le répertoire jh doit être créé. De plus, dans ce chemin, vous devriez avoir l'autorisation de créer de nouveaux fichiers/répertoires.

Par exemple, votre script devrait ressembler à:

#!/bin/sh

mkdir /home/lucky/jh
cd /home/lucky/jh

De plus, /usr/bin/sh n'est pas le bon chemin pour sh. Le bon chemin est /bin/sh. Vous pouvez vérifier cela avec la commande whereis sh. Et même ainsi, votre travail cron devrait ressembler à:

20 * * * * /home/lucky/myfile.sh

N'oubliez pas de rendre le script exécutable:

chmod +x /home/lucky/myfile.sh
57
Radu Rădeanu

Le chemin où cela semble créer le dossier est /. Cela est dû au fait que crontab nécessite le chemin complet du dossier et des fichiers dans tous les fichiers qu'il exécute.

Donc, le chemin dans myfile.sh devrait être

mkdir <absolutePath>/jh

cd <absolutePath>/jh

20 * * * * /usr/bin/sh /home/lucky/myfile.sh Cette ligne est correcte bien que vous deviez vérifier le chemin pour voir si sh existe dans/usr/bin/sh ou non (utilisez which sh pour voir le chemin où sh existe; le mien était/bin/sh)

Si vous êtes pressé de commencer à écrire crontab, ce lien contient de très bons exemples.

http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

5
penguinRaider