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

44

J'avais mis un travail cron:

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

Le problème principal 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 
Abhishek Tripathi
la source
Cela peut vous aider: help.ubuntu.com/community/CronHowto
PeppeDAlterio
2
si monfichier.sh est défini comme exécutable?
rogerdpack

Réponses:

61

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

mkdir jh
cd jh 

Vous devriez donner le chemin complet où le jhrépertoire 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

Aussi /usr/bin/shn'est pas le bon chemin pour sh. Le bon chemin est /bin/sh. Vous pouvez vérifier cela avec la whereis shcommande. 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
Radu Rădeanu
la source
Awsome, m'a sauvé la vie :) Le mien fonctionne bien comme ça. 0 7 * * * / bin / sh /root/Scripts/command.sh> / dev / null 2> & 1
Louwki
5

Le chemin où cela semble créer le dossier est /. En effet , le crontabrequiert le chemin complet vers le dossier et les 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.shCette ligne est correcte bien que vous deviez vérifier le chemin pour voir si sh existe dans / usr / bin / sh ou non (utilisez which shpour 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/

pingouinRaider
la source