Utilisation de crontab pour un script PYTHON
Résolu
cvan85
Messages postés
58
Date d'inscription
Statut
Membre
Dernière intervention
-
cvan85 Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
cvan85 Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Lancer un programme python depuis le terminal linux
- Commande terminal mac - Guide
- Lancer un programme au démarrage windows 10 - Guide
- Citizen code python avis - Accueil - Outils
- Programme demarrage windows - Guide
- Linux reader - Télécharger - Stockage
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 utiliser
D'ailleurs, pourquoi forcer la version de python ?
Personnellement, j'écrirais simplement au début du fichier python :
Cela lancera ton script avec le dernier interpréteur
Exemple :
Bonne chance
Quelle version de python est installée sur ton système ? Car la deuxième ligne de ton script stipule qu'il faut utiliser
python3.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éteur
python3disponible, 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 :
D'ailleurs hors utilisation du
Comme si le fait d'être lancé via le cron modifiait mon environnement.
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 du
crontab, 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
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
À mon avis, non. Le chemin dans lequel est installé Python 3 me paraît aussi assez suspect (il devrait être
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éteur
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.
Bonne chance
Qui lance cron ? Le même utilisateur ? Si tu lances
/usr/bin/envavec cet utilisateur, est-ce que
/Library/Frameworks/Python.framework/Versions/3.9/bin/figure dans ton
PATH?
/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/binsi c'est comme sous Linux)... mais peut-être est-ce normal sous Mac OS ? As tu installé
python3via 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éteur
python3.9, mais bien
python3. 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