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

Python Discussion :

pb avec crontab qui envoi du os.popen


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut pb avec crontab qui envoi du os.popen
    Bonjour

    J'ai besoin d'envoyer une commande linux ("pure-ftpwho -s") via un script python
    Le but est de traiter le retour.
    Quand j’exécute mon script (sous ubuntu) depuis une fenetre terminal tout va bien.
    Par contre quand je demande a la crontab d'executer ledit script il n'a aucune reponse...

    J'ai bien vérifié que la crontab executait le script sans erreur...

    Je pensait a un pb de stdout...
    J'ai testé avec subprocess vu que popen etait deprecated.... mais pareil.

    Ci dessous le script :

    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
    21
     
      ftpState = os.popen('pure-ftpwho -s')
      while 1:
        loggedFtp = ftpState.readline()
        if not loggedFtp:
          break
        else:
          loggedFtp = loggedFtp.split('|')
          userFtp     = loggedFtp[1]
          timeDwnld   = loggedFtp[2]
          actionFtp   = loggedFtp[3]
          fileFtp     = loggedFtp[4]
          ipFtp       = loggedFtp[5]
          destFtp     = loggedFtp[6]
          portFtp     = loggedFtp[7]
          currentSize = loggedFtp[8]
          totalSize   = loggedFtp[9]
          percentFtp  = loggedFtp[10]
          speedFtp    = loggedFtp[11]
          printlog(time.asctime())
          printlog('%s %s %s from %s at speed %s K/s : %s percent done'%(userFtp, actionFtp, fileFtp, ipFtp, speedFtp, percentFtp))
    si vous avez une idee?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Est ce que le printlog fonctionne dans le contexte "cron"?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Salut

    Je connais pas trop les histoires de contexte...
    mais juste avant le bout de code que j'ai mis il y a le def du printlog
    et si je fait un printlog('totot') je l'ai bien ecrit quand le cron l'execute.

    Donc je dirait qu'il est connu dans le contexte ?

    Ci dessous le debut du code pour que tout y soit ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env python
     
    import os, commands, time, subprocess
     
    def printlog(text):
      fileToBeWriten = "/home/dimi/prog/ftpScript/ftpLog.txt"
      fichierWrite = open(fileToBeWriten,'a')
      fichierWrite.write(text)
      fichierWrite.write('\n')
      fichierWrite.close()

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    crontab ne peut exécuter que des tâches utilisateur et jamais root.

    Cela dit, tu peux toujours faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chmod 4711 /usr/local/sbin/pure-ftpwho
    comme conseillé dans leur FAQ [0]

    (vérifie le chemin, sous Debian, normalement local/ n'est pas utilisé)

    [0] http://download.pureftpd.org/pub/pure-ftpd/doc/FAQ

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse

    J'utilise souvent la crontab de root (sudo crontab -e) pour lancer des scripts qui ne fonctionnent qu'en root.
    Je doit pas bien comprendre ce que tu veux dire.

    Dans tous les cas j'ai essayé de donner les droit autre qu'a root pour pure-ftpwho
    Ca marche bien en console sans sudo
    par contre la crontab ne reussi toujours pas...

    Une autre idee ?

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Si crontab rencontre une erreur, elle n'apparaîtra pas dans ton fichier. Il n'y pas de raison d'ailleurs.

    Par contre, cron communique par mail, regarde dans /var/mail/ si il y a un texte à ton nom. C'est là que tu sauras ce qu'a réellement fait cron.

    Ubuntu n'embarque plus de serveur mail par défaut depuis quelques versions (au minimum Oneiric) donc si tu ne trouves pas ce mail, installe un serveur.

    Exemple postfix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sudo apt-get install postfix
    Les erreurs rencontrées par crontab seront maintenant lisibles dans ce mail.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    J'avait mis dans la crontab :
    command >> ficherLogErreur.txt
    en pensant qu'elle redirigerai les erreurs d’exécution éventuelle. (Mais après test avec erreur volontaire cela n'a pas l'air de marcher...)

    du coup je retient le coup du mail c'est plus simple et ca marche ;-) (J'avait déjà postfix installé..)

    et l'erreur pour info est qu'il fallait mettre le chemin complet de pure-ftpwho dans la commande popen.
    Dans un terme il doit avoir sbin dans le path, pas dans la crontab...

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. une application qui envoie un émail avec SSL
    Par tomy_libre dans le forum Débuter
    Réponses: 1
    Dernier message: 19/07/2009, 01h06
  2. Probleme avec send qui n'envoi rien
    Par zeleyou dans le forum C++
    Réponses: 5
    Dernier message: 06/02/2006, 15h27
  3. (jsp) problème avec sql qui contient la date
    Par future dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 31/08/2005, 16h18
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48

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