J'aimerais mettre en place une tâche cron en utilisant crontab -e
. Ce travail doit être exécuté en tant que root, donc j'ai pensé qu'il suffisait d'ajouter une entrée dans le fichier sudo crontab -e
aurait été suffisant. Malheureusement, ce n'est pas le cas.
Le script que je dois exécuter fonctionne bien si je tape directement :
sudo /home/user/./script.sh
Je suis connecté à la machine en tant qu'utilisateur user
et mon entrée crontab ( sudo crontab -e
) ressemble à ce qui suit :
*/1 * * * * /home/user/./script.sh
Alors, qu'est-ce qui me manque ici ? J'ai l'impression que le problème est lié au droit de l'utilisateur actuel ou quelque chose comme ça.
Tout d'abord, j'ai pu me débarrasser de la nécessité d'être root pour exécuter le script. Mon crontab
entrée (un classique crontab -e
puisque je n'ai plus besoin d'être root) tourne toutes les minutes et est :
* * * * * /home/user/script.sh
Mon script.sh
:
#!/bin/bash
set -e
# Other stuff
Encore une fois, cela fonctionne quand on tape manuellement ./script.sh
mais pas à partir de la tâche cron créée.
Je sais avoir la preuve que le script est exécuté par le cron job. J'ai redirigé l'erreur sur un fichier comme conseillé dans le commentaire et j'obtiens l'erreur suivante dans celui-ci :
python: can't open file 'get-status.py': [Errno 2] No such file or directory
Pour expliquer cela, à un moment donné dans mon script.sh
J'utilise Docker pour exécuter un autre script :
docker run -v $PWD:/t -w /t [image] [command] get-status.py
qui, là encore, fonctionne manuellement ( ./script.sh
) mais pas à partir de la tâche cron .
Donc, j'ai trouvé le problème : docker run -v $PWD:/t [...]
copier le contenu du répertoire courant dans le conteneur docker. Puisqu'il est exécuté à partir d'une tâche cron, le répertoire courant n'est bien sûr pas le bon, d'où l'utilisation de l'attribut file not found
exception.
Je trouve que c'est assez laid de faire quelque chose comme docker run -v /home/user/:/t [...]
y aurait-il un autre moyen ?
Bien que cette question soit marquée comme étant un doublon, il ne s'agit pas du même problème. J'ai un PATH
dans mon script, et j'ai dû le modifier car il est déclenché par une tâche cron qui a pris le $PWD
chemin du script.
Voir ma propre réponse.