web-dev-qa-db-fra.com

Comment définir des autorisations pour que le travail soit exécuté depuis cron

J'ai le script python qui fonctionne bien. Je veux l'exécuter comme un travail cron toutes les 10 minutes

J'ai fait crontab -e et entré la ligne

*/10 * * * * root python /path/to/script/script.py

Il ne semble pas être en cours d'exécution.

Donc, j'ai joué sur la ligne de commande et voir à quel point il cesse de fonctionner. Il fonctionne dans son répertoire et tous ceux qui le précèdent jusqu'à ce que je quitte mon répertoire personnel (c'est-à-dire si je suis dans /home/henry/ alors il s'exécute mais si je suis dans, par exemple, /var, puis pas) quand je reçois une erreur d’autorisation en essayant d’écrire dans un fichier.

# save this for next time
with open(mycsvfile, "w") as outfile:
    writer = csv.writer(outfile)
    writer.writerows([s.strip().encode("utf-8") for s in row ]for row in list_of_rows)
outfile.close()

J'ai déjà fait chmod +x /home/user/Location/Of/Script pour s'assurer que le script a accès (je pensais). Qu'est-ce que je rate? Merci de votre aide

2
HenryM

Supprimez la chaîne root (en supposant que python existe dans le cron défini PATH, sinon utilisez le chemin absolu, par exemple /usr/bin/python):

*/10 * * * * python /path/to/script/script.py
*/10 * * * * /usr/bin/python /path/to/script/script.py

Pourquoi:

  • Lorsque vous utilisez crontab -e pour ouvrir une table cron, vous ouvrez l'utilisateur invoquant crontab, aucun champ de nom d'utilisateur n'est autorisé (contrairement à /etc/crontab et /etc/cron.d/*).

  • Dans l'état actuel des choses, vous exécutez la commande root (qui n'est probablement pas disponible) avec les arguments python et /path/to/script/script.py

De même, si vous avez rendu le script exécutable, vous devez ajouter un Shebang indiquant l’interpréteur de script (par exemple, /usr/bin/python) au lieu d’exécuter le script en tant qu’argument pour l’interpréteur. Ensuite, vous pouvez faire:

*/10 * * * * /path/to/script/script.py
4
heemayl