Utilisation de crontab pour un script PYTHON
Résolu
cvan85
Messages postés
59
Statut
Membre
-
cvan85 Messages postés 59 Statut Membre -
cvan85 Messages postés 59 Statut Membre -
Bonjour,
Je rencontre un problème avec l'utilisation de crontab pour lancer un script Python. À partir du terminal ce script tourne sans problème. Souhaitant le lancer tous les jours à 19h00, je l'ai inclus dans un fichier crontab.
Mon script shell de lancement (
Fichier crontab :
00 19 * * * /users/xxxxxxxxxx/PYTHON/prog/LANC_BAG
Script python (partiel)
Au lancement à 19h00, j'ai le message suivant dans
J'ajoute que si je remplace la ligne
Y a t-il une incompatibilité à l'utilisation d'un script Python avec crontab (sous MacOS)
Merci
Claude
Configuration: Configuration: Configuration: Macintosh / Safari 15.0
Je rencontre un problème avec l'utilisation de crontab pour lancer un script Python. À partir du terminal ce script tourne sans problème. Souhaitant le lancer tous les jours à 19h00, je l'ai inclus dans un fichier crontab.
Mon script shell de lancement (
LANC_BAG) :
clear LOC_FICH=/users/xxxxxxxx/PYTHON/Prog/gestion_crypto/ export LOC_FICH DDJ=`date +%d-%m-%Y` NFIC=/users/xxxxxxxxr/bag_report EXT=".txt" $HOME/PYTHON/Prog/bag.py >$NFIC$DDJ$EXT 2>&1
Fichier crontab :
00 19 * * * /users/xxxxxxxxxx/PYTHON/prog/LANC_BAG
Script python (partiel)
#!/usr/bin/env python3.9 # -*- coding:Utf-8 -*- import os import datetime # Importation des modules de librairies (Request, Session ...) from requests import Request, Session from requests.exceptions import ConnectionError, Timeout, TooManyRedirects import json #...
Au lancement à 19h00, j'ai le message suivant dans
stderr:
env: python3.9: No such file or directory
J'ajoute que si je remplace la ligne
$HOME/PYTHON/Prog/bag.py >$NFIC$DDJ$EXT 2>&1par un simple
echo, je n'ai pas en erreur.
Y a t-il une incompatibilité à l'utilisation d'un script Python avec crontab (sous MacOS)
Merci
Claude
Configuration: Configuration: Configuration: Macintosh / Safari 15.0
5 réponses
-
Bonjour,
Quelle version de python est installée sur ton système ? Car la deuxième ligne de ton script stipule qu'il faut utiliserpython3.9
, or celui-ci ne semble manifestement pas installé.
D'ailleurs, pourquoi forcer la version de python ?
Personnellement, j'écrirais simplement au début du fichier python :
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
Cela lancera ton script avec le dernier interpréteurpython3
disponible, comme le montre la commande :ls -l $(which python3)
Exemple :
(mando@silk) (~) $ ls -l $(which python3)
lrwxrwxrwx 1 root root 10 2 mai 00:33 /usr/bin/python3 -> python3.10
Bonne chance -
Bonjour et merci pour ces premiers éléments de réponse.
J'utilise bien la version 3.9 comme retourné par ta commande :
ls -l $(which python3)
lrwxr-xr-x 1 root admin 9 10 déc 2020 /Library/Frameworks/Python.framework/Versions/3.9/bin/python3 -> python3.9
D'ailleurs hors utilisation ducrontab
, ce script fonctionne.
Comme si le fait d'être lancé via le cron modifiait mon environnement. -
Un grand merci, cela faisait un moment que je tournai en rond.
S'agissant du PATH, il contient bien le bon chemin :
/usr/bin/env | grep "^PATH="
PATH=/Library/Frameworks/Python.framework/Versions/3.9/bin:./PYTHON/prog:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
J'ai utilisé le lancement via un script shell et spécifié le chemin de l'interpréteur python comme tu le préconises.
J'ai également dans mon script python indiqué python3 afin d'utiliser le lien vers python 3.x
Mon traitement s'effectue donc parfaitement via le crontab.
Encore merci.
Claude-
Merci pour ton retour et bonne continuation !
Juste une précision, d'après cette discussion, cron écrase effectivement la variable d'environnement. Apparemment, tu peux définir cette variable PATH
- soit en début de fichier :
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- soit avec une ligne du genre :
* * * * * PATH=$PATH:/usr/local/bin:/path/to/some/thing
Dans ton cas, j'essaierais donc simplement de mettre en début de fichier cron :
PATH=$PATH
Bonne chance
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour Claude,
Qui lance cron ? Le même utilisateur ? Si tu lances/usr/bin/env
avec cet utilisateur, est-ce que/Library/Frameworks/Python.framework/Versions/3.9/bin/
figure dans tonPATH
?
/usr/bin/env | grep "^PATH="
À mon avis, non. Le chemin dans lequel est installé Python 3 me paraît aussi assez suspect (il devrait être/usr/bin
si c'est comme sous Linux)... mais peut-être est-ce normal sous Mac OS ? As tu installépython3
via ton gestionnaire de paquets (brew install python3
) ?
Par ailleurs, je maintiens que tu ne devrais pas (à moins d'avoir une très bonne raison) de spécifier que tu veux un interpréteurpython3.9
, mais bienpython3
. Cela permettra que ton script continue à marcher quand tu mettras à jour ton interpréteur Python 3.
Enfin, une autre manière de résoudre le problème est de lancer ton script python via script shell en spécifiant le chemin vers l'interpréteur python que tu souhaites utiliser.
#!/usr/bin/env sh clear LOC_FICH=/users/xxxxxxxx/PYTHON/Prog/gestion_crypto/ export LOC_FICH DDJ=`date +%d-%m-%Y` NFIC=/users/xxxxxxxxr/bag_report EXT=".txt" PYTHON3=/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 $PYTHON3 $HOME/PYTHON/Prog/bag.py >$NFIC$DDJ$EXT 2>&1
Bonne chance