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 :

'ps -aux' sans sortie ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut 'ps -aux' sans sortie ?
    Bonjour,

    j'essaye de faire un simple script Bash qui surveille la présence d'un autre script.
    Mon idée est de faire une boucle while avec un ps -aux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    while ! ps -auxf | grep "[c]ana.php" > /dev/null 2>&1 ; do
    #rien, tu attends !
    date >> /home/fichier.log
    echo "j'ai rien pour l'instant" >> /home/fichier.log
    sleep 5
    done
    Voilà, ce script fonction parfaitement si je le lance à la main.
    Mais lors du boot c'est init qui le lance (je le lance depuis rc.locale)
    et là, ps -aux ne sort rien du tout !!

    Savez vous pourquoi ? Je me doute qu'il y a quelque chose avec l'environnement mais quoi ?

    J'ai fait des recherche sur 'ps' mais je n’aboutis pas !

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 543
    Par défaut
    Hello,

    Si tu utilises les options « auxf », je crois qu'il ne faut pas mettre de « - » (syntaxe du ps de BSD).

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Tu peux aussi t'éviter le ps | grep grâce à la commande pidof

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    ou pgrep.

    mais puisque tu connais le nom exact de la commande, pourquoi pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    until ps h -C cana.php >/dev/null 2>&1
    do 
       date >> ~/fichier.log
       sleep 5
    done
    ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Si tu utilises les options « auxf », je crois qu'il ne faut pas mettre de « - » (syntaxe du ps de BSD).
    Effectivement, il faut savoir qu'il y a 2 syntaxes (cf. man ps)... et il faut choisir!
    Soit ps -ef (style classique) soit ps aux (style BSD), mais pas 'ps -auxf'!

    Il se peut aussi qu'il y ait plusieurs ps sur ta machine. Pour savoir lequel est utilisé par ton script, ajoute 'which ps' au début su script.

    Pour ceux qui pourraient s'étonner de voir 'grep "[c]ana.php"' plutôt que le parfaitement équivalent 'grep "cana.php"' , c'est une astuce qui permet d'éviter le 'grep -v grep' (pour filtrer le process qui fait le grep).

    Sinon, les réponses utilisant pidof ou pgrep sont plus élégantes... mais probablement moins portables...

  6. #6
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Bonjour,

    Désolé pour la réponse tardive,
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    until ps h -C cana.php >/dev/null 2>&1
    do 
       date >> ~/fichier.log
       sleep 5
    done
    Je n'ai pas le bon fonctionnement avec ça.
    d'ailleurs quand je lance en ligne de commande je n'ai pas de sortie. Car je pense que ps réagit plutot à php5 qu'au script php lancé dans la ligne concernant pidof c'est la même chose ça fonctionne avec php5, mais pas du coup si j'ai deux scripts php lancés il n'y a plus de discrimination !

    Qu'en pensez vous ?

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    je suis surpris qu'on ne puisse pas mettre php en shebang.

    la façon dont est lancé le script, c'est comme si, pour un shell, on le lançait ainsi sh monScript, alors qu'en étant exécutable, et avec un shebang correct (#!/bin/sh) le script est exécuté ainsi <chemin/>monScript.

    donc on le retrouve par son nom.

    tu peux éditer le script pour lui ajouter un shebang PHP ?

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Pourquoi ne mets-tu pas un fichier sémaphore dans ton script php?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $flock = '/tmp/php_flock';
    file_put_contents($flock, '');
    /* ton code php */
    unlink($flock);
    Tu n'as plus ensuite qu'à tester l'existence du fichier dans ton script shell.

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ! pgrep -f cana.php; do
        date >> /home/fichier.log
        sleep 5
    done

  10. #10
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Oui cette solution apporte de l'eau à mon moulin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ! pgrep -f cana.php; do
        date >> /home/fichier.log
        sleep 5
    done
    Par contre il faut ajouter la petite astuce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ! pgrep -f [c]ana.php; do
    pour éviter d'avoir un retour sur le pgrep lui même, sinon on sortirai du while de toute façon.

    Il me reste un petit soucis, lorsque je sors de ma boucle d'attente je dois lancer un script en tant qu'utilisateur Lambda. Mais dans ce cas je suis root. Il faut changer d'utilisateur. Je suppose qu'il faut faire ça avec su Lambda. Il faut un mot de pass ? peut on contourner le mot de pass ?

    Merci

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    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 103
    Par défaut
    Citation Envoyé par ntrvdonett Voir le message
    Il me reste un petit soucis, lorsque je sors de ma boucle d'attente je dois lancer un script en tant qu'utilisateur Lambda. Mais dans ce cas je suis root. Il faut changer d'utilisateur. Je suppose qu'il faut faire ça avec su Lambda. Il faut un mot de pass ? peut on contourner le mot de pass ?

    Merci
    Lorsqu'un script est exécuté avec root, il bypasse la gestion de droits. Tu peux donc faire le su: il ne demandera pas de mot de passe.

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par ntrvdonett Voir le message
    Par contre il faut ajouter la petite astuce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ! pgrep -f [c]ana.php; do
    pour éviter d'avoir un retour sur le pgrep lui même, sinon on sortirai du while de toute façon.
    Non, cette petite astuce est inutile car pgrep s'exclut de lui-même de la recherche.

  13. #13
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Merci pour vos réponses.

    J'ai fait à la main un et j'ai obtenu deux lignes avec deux numéros de processus différents. Si je refais la commande plusieurs fois, le deuxième numéro évolue, j'en ai conclu que la commande elle même "parasitait" le résultat ?

  14. #14
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Sous quel OS ?

  15. #15
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Je suis sous Debian Squeeze noyau 3.6.0
    Malgré tout la surveillance fonctionne (avec mes petits crochets), je sors de ma boucle mais je souhaite lancer le script de démarrage de DropBox et là rien ! encore
    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    su fab >> /home/fab/fichier.log
    cd /home/fab/  >> /home/fab/fichier.log
    dropbox.py start  >> /home/fab/fichier.log
    et soudain, rien ne se passe !

  16. #16
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par ntrvdonett Voir le message
    Je suis sous Debian Squeeze noyau 3.6.0
    Que dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in $(pgrep -f cana.php); do
    printf "%d : %s\n" $i "$(ps -o command $i | tail -n +2)"
    done
    ?

    Malgré tout la surveillance fonctionne (avec mes petits crochets), je sors de ma boucle mais je souhaite lancer le script de démarrage de DropBox et là rien ! encore
    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    su fab >> /home/fab/fichier.log
    cd /home/fab/  >> /home/fab/fichier.log
    dropbox.py start  >> /home/fab/fichier.log
    et soudain, rien ne se passe !
    Essaie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su fab -c "cd /home/hab; dropbox.py start" >> /home/fab/fichier.log

  17. #17
    Membre averti
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Par défaut
    Ok merci pour ta réponse.

    J'essaye tout ça lundi.

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Citation Envoyé par ntrvdonett Voir le message
    Bonjour,

    j'essaye de faire un simple script Bash qui surveille la présence d'un autre script.
    Mon idée est de faire une boucle while avec un ps -aux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    while ! ps -auxf | grep "[c]ana.php" > /dev/null 2>&1 ; do
    #rien, tu attends !
    date >> /home/fichier.log
    echo "j'ai rien pour l'instant" >> /home/fichier.log
    sleep 5
    done
    Voilà, ce script fonction parfaitement si je le lance à la main.
    Mais lors du boot c'est init qui le lance (je le lance depuis rc.locale)
    et là, ps -aux ne sort rien du tout !!

    Savez vous pourquoi ? Je me doute qu'il y a quelque chose avec l'environnement mais quoi ?

    J'ai fait des recherche sur 'ps' mais je n’aboutis pas !

    Merci
    Bonjour,

    Juste pour préciser que la commande 'ps' à besoin d'avoir un tty de défini car elle formate sa sortie pour celui-ci.
    Cela doit être la raison pour laquelle le script fonctionne lorsqu'il est executer à la main mais pas par init.

    Cordialement.

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    Citation Envoyé par disedorgue
    la commande 'ps' à besoin d'avoir un tty de défini car elle formate sa sortie pour celui-ci.
    mais bien sûr, «et la marmotte...»
    c'est pour ça que des scripts d'init, tels que udev ou cups, l'utilisent !

  20. #20
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 408
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mais bien sûr, «et la marmotte...»
    c'est pour ça que des scripts d'init, tels que udev ou cups, l'utilisent !
    Ok, je me trompe certainement (ce n'est pas une rhétorique ironique). Et si quelqu'un a la réponse, je suis preneur.

    Personnellement, j'ai déjà eu un cas similaire avec un script qui fonctionnait très bien lorsqu'on le lançait à la main mais qui ne voulait plus fonctionner si on le lançait à distance depuis un ssh. Par contre si on dit à ssh d'allouer un pseudo tty (option -t), là le script fonctionne.

    Cordialement.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/08/2014, 17h55
  2. Réponses: 2
    Dernier message: 04/10/2011, 16h55
  3. tmap filtre sur jointure sans sortie
    Par Syphys dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 21/09/2010, 15h43
  4. Affectation du résultat d'une ps sans paramètre de sortie
    Par PERRIN38 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/08/2005, 16h43
  5. [LG] Exit sans sortie
    Par Belegkarnil dans le forum Langage
    Réponses: 1
    Dernier message: 28/06/2005, 11h49

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