1 votes

Configuration de la crontab, problèmes avec l'utilisateur

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 ?

Solution

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.

1voto

Tuan Nguyen Points 1

Le problème principal de ma question était en fait un problème avec le système de gestion de l'information. PATH que j'ai défini dans mon travail cron.
Le job cron est utilisé pour déclencher un job, et ce job copiera le fichier actuel dans un conteneur docker via docker run -v $PWD:/t [...] .
Puisque la tâche cron n'est pas déclenchée à partir du bon répertoire, j'ai dû modifier le chemin dans mon script pour indiquer à docker de ne pas utiliser l'option actuel mais le répertoire sur lequel se trouve le script. réside .
Comme indiqué dans ce réponse je modifie les lignes pour :

 SCRIPT=$(readlink -f "$0")
 SCRIPTPATH=$(dirname "$SCRIPT")
 docker run -v $SCRIPTPATH:/t [...]

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X