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
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