IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script Python qui ne fonctionne pas avec cron


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut Script Python qui ne fonctionne pas avec cron
    Bonjour,

    J'ai créé un script python qui se lance très bien en manuelle mais dans le cron il me donne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 28, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 16, in run_sqlplus
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
        errread, errwrite)
      File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    Ce que j'ai mis dans cron est la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * PATH=/bin:/usr/bin:/sbin:/usr/sbin  /usr/bin/python /data1/orli/prod/BVT/sql/sql/test_script.py>> ~/cron.log 2>&1
    Merci d'avance de votre aide

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 863
    Points : 219 060
    Points
    219 060
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Problème avec un fichier ouvert par le script. Possiblement un problème de chemin (utilisation d'un chemin relatif) ou problème de droit. Petit rappel : cron va exécuter avec des droits particuliers (pas nécessairement l'utilisateur habituel) et avec un répertoire courant autre que celui que l'on peut imaginer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci pour la réponse je vais essayé de suite.

  4. #4
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Re,

    j'ai appliquer ce que tu as dit mais rien n'y fait j'ai toujours le même problème, j'ai chmod +x le script et je n'ai mis que des chemins absolue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 31, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 19, in run_sqlplus
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
        errread, errwrite)
      File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 863
    Points : 219 060
    Points
    219 060
    Billets dans le blog
    120
    Par défaut
    Regardez dans vos scripts, notamment ici :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 31, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)

    Le chmod +x, je ne pense pas. Je pense plus que c'est un problème de user/groupe (cron utilise un autre utilisateur que votre compte habituel). En plus, je vois un /data1 possiblement un dossier partagé provenant du réseau, n'acceptant possible que les accès par vous, comme utilisateur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Oui, je vois mais le script est dans la machine qui possède ce chemin et donc pour toi je dois utilisé cette commande chown ?

  7. #7
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Up s'il vous plaît ?

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 863
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 863
    Points : 219 060
    Points
    219 060
    Billets dans le blog
    120
    Par défaut
    Je ne sais pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Ah dommage, merci quand même pour l'aide, je vais attendre d'autre proposition.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 637
    Points : 1 310
    Points
    1 310
    Par défaut
    Bonsoir,

    Juste pour essayer de faire avancer le truc :

    le cron et le script php appartiennent au même user ?

    le shebang dans le script ?? par exemple ?

    hth,

  11. #11
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci pour ta réponse et voici le shebang dans le script:

  12. #12
    Membre expérimenté
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 637
    Points : 1 310
    Points
    1 310
    Par défaut
    Bonjour,

    Du coup "python" pointe bien sur python2.6 ??
    Sinon dans le cron on peut essayer de mettre un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * env > env_dumb.txt
    et comparer avec le retour de env en console.
    Le PATH en console et celui de cron ne sont pas les mêmes, c'est surement là que ça coince imho.

    hth,

  13. #13
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    je suis allez voir ce n'est pas du tout la même déjà en terme de longueur de env en console qui super chargé et celui de cron qui apparait comme minuscule par rapport à celui de la console.

    Pour répondre à ta question, je crois que c'est Python 2.6.6

    mais je ne sais pas quoi changer pour que cela fonctionne ?

    Merci pour ta réponse.

  14. #14
    Membre expérimenté
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 637
    Points : 1 310
    Points
    1 310
    Par défaut
    Bonjour,
    Pour python je pense que c'est bon.

    Par contre je continue de penser qu'il manque un bout de PATH pour faire tourner le script via cron.
    Il faudrait vérifier si tous les scripts pyton appelés via crontab sont bien dans le PATH de cron.

    hth,

  15. #15
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Merci de ton aide mais comment je fais pour faire cela ?

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par azaouali Voir le message
    Bonjour,

    J'ai créé un script python qui se lance très bien en manuelle mais dans le cron il me donne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 28, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 16, in run_sqlplus
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
        errread, errwrite)
      File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    Je ne suis pas spécialiste de python, ni de sqlplus, donc merci de prendre avec des pincettes (voire avec de grosses pinces) ce que je dis ci-dessous...

    D'abord je trouve que c'est quand même sacrément dommage qu'il dise "No such file or directory", mais qu'il ne donne pas clairement le nom du fichier qu'il ne trouve pas !?!?

    Comme, à la ligne précédente, il parle de stdout et stderr et que la ligne de cron finit par "2>&1", ne pourrait-il pas s'agir du fichier de sortie utilisé ?

    Ce que j'ai mis dans cron est la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * PATH=/bin:/usr/bin:/sbin:/usr/sbin /usr/bin/python /data1/orli/prod/BVT/sql/sql/test_script.py>> ~/cron.log 2>&1
    Merci d'avance de votre aide
    D'ailleurs, il me semble pour le moins étrange de mettre un "~" dans une ligne de cron.

    À qui penses-tu que ce "~" fasse référence ? (je rappelle que cron exécute ses commandes dans un environnement différent de l'utilisateur habituel)

    Afin d'éliminer définitivement ce qui est peut-être une fausse piste, pourrais-tu essayer de remplacer test_script.py>> ~/cron.log 2>&1 par test_script.py>> /tmp/cron.log 2>&1 et nous indiquer ce que ça donne ?

  17. #17
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci également de ta réponse mais je vais te décevoir c'est le même message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Traceback (most recent call last):
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 31, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 19, in run_sqlplus
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
        errread, errwrite)
      File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    Traceback (most recent call last):
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 31, in <module>
        sqlplus_output = run_sqlplus(sqlplus_script)
      File "/data1/orli/prod/BVT/sql/sql/test_script.py", line 19, in run_sqlplus
        stdout=subprocess.PIPE,stderr=subprocess.PIPE)
      File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
        errread, errwrite)
      File "/usr/lib64/python2.6/subprocess.py", line 1238, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory

  18. #18
    Expert éminent sénior
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 480
    Points : 11 088
    Points
    11 088
    Par défaut
    Citation Envoyé par azaouali Voir le message
    je suis allez voir ce n'est pas du tout la même déjà en terme de longueur de env en console qui super chargé et celui de cron qui apparait comme minuscule par rapport à celui de la console.

    Pour répondre à ta question, je crois que c'est Python 2.6.6

    mais je ne sais pas quoi changer pour que cela fonctionne ?

    Merci pour ta réponse.
    En résumé après tous les tests et recommandations fort justement préconisés par mes collègues précédemment *, nous ne savons toujours pas avec quel user tu lances le script python en interactif, c'est à dire avec toutes les variables d'environnement liées à la connexion, à savoir de base les fichiers .bashrc & .bash_profile sur ton système Linux.

    *
    La crontab a un environnement minimal par défaut:

    Littlewhite Je pense plus que c'est un problème de user/groupe (cron utilise un autre utilisateur que votre compte habituel)
    Ti-Slackeux
    le cron et le script php appartiennent au même user ? (bon, il voulait dire python au lieu de php mais c'est le même professionnalisme dans l'esprit)
    jack-ft (je rappelle que cron exécute ses commandes dans un environnement différent de l'utilisateur habituel)

    Il faut soit mettre les chemins absolus pour chaque commande, soit sourcer ton environnement utilisateur, soit définir tes variables d'environnement dans ton script.

    Merci zipe31 ici

    PS
    Pour l'appel à python, vérifies par which python, file python, etc l'éventuel lien symbolique ** pointant vers la version exacte de python (voir ci-après):

    Portabilité

    On peut utiliser le programme env au lieu d'un interpréteur de commandes pour chercher celui-ci dans le PATH (ce qui évite de devoir réécrire la première ligne des scripts si on doit les porter sur une autre machine par exemple) :

    #!/usr/bin/env python
    … mais le problème est que l'on risque de ne pas appeler la bonne version de l'interpréteur si plusieurs sont présentes sur la machine. Un moyen de pallier cela est de détailler le nom de l'interpréteur :

    #!/usr/bin/env python2

    Voire :

    #!/usr/bin/env python2.7

    À noter que ces commandes sont parfois équivalentes : ainsi, sur une machine où python 2.7 et python 3.0 sont installés, python2 sera généralement un lien symbolique vers python2.7. Par contre, on ne peut garantir vers quoi pointe python : sur certaines machines, il pointera vers python2, tandis que sur d'autres, il pourra pointer vers python3.
    Source: Shebang - Wikipedia


    **

    « La commande d'affichage de contenu de répertoire ls représente les liens symboliques de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lrwxrwxrwx  1 root root  9 2005-08-26 21:47 python -> python2.3
    Le l de la première colonne indique que cette entrée est un lien symbolique. À l'extrême droite de la ligne sont affichés les caractéristiques de ce lien symbolique : quand l'utilisateur accèdera à python, il sera redirigé de façon transparente par le système vers la version python2.3. Dans cet exemple, le lien symbolique a été créé pour conserver à la fois plusieurs versions (2.1, 2.2, 2.3, etc.) du langage Python. »

    Source: Lien symbolique - wikipedia
    « Developpez.com est un groupe international de bénévoles dont la motivation est l'entraide au sens large » (incl. forums developpez.net)
    Club des professionnels en informatique

  19. #19
    Membre régulier
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Points : 83
    Points
    83
    Par défaut
    Merci pour cette réponse constructive

Discussions similaires

  1. Script ajax qui ne fonctionne pas avec une écran smartphone
    Par beegees dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/08/2016, 12h27
  2. Script SVG qui ne fonctionne pas avec FF uniquement
    Par bronon dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/02/2015, 23h16
  3. Script fonctionne pas avec cron
    Par Nelmo dans le forum Administration système
    Réponses: 11
    Dernier message: 09/07/2012, 17h01
  4. fichier shell qui ne fonctionne pas avec le cron mais fonctionne dans le shell
    Par diabli73 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/10/2008, 19h12
  5. Script JSP qui ne fonctionne pas sur n'importe quel poste
    Par vannary dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 18/12/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo