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

Linux Discussion :

Lancer un daemon depuis un PHP Crontab


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut Lancer un daemon depuis un PHP Crontab
    Hello Gurus !

    Je tente de lancer une tâche daemon à partir d'un PHP qui tourne en crontab toutes les heures.

    Je m'explique :
    Je souhaite lancer plusieurs web radios Shoutcast à heure fixe (programme => encodeur 'sc_trans')
    J'ai un PHP en Crontab qui s'exécute toutes les heures pour déterminer quelles sont les radios à lancer, à partir des infos d'une base MySQL.

    Le PHP envoie une commande au système par l'intermédiaire de la commande 'exec', qui doit démarrer les radios.

    Le problème que je rencontre est que la commande 'exec' de PHP attend la fin de la commande envoyée mais il n'y a pas de fin puisque c'est une radio qui émet en permanence ! et donc il m'est impossible de lancer les autres radios ensuite.

    Lorsque je lance le programme depuis le terminal, pas de problème avec NOHUP qui lance bien mon daemon et se détache du terminal, mais avec un Crontab impossible de détacher le processus appelé...
    J'ai tenté le '&' à la fin de ma commande, rien à faire.

    Donc, comment lancer un Daemon dans un crontab pour qu'il se détache du programme qu'il l'appelle, en occurrence PHP dans ce cas.
    Difficile de trouver sur les forums même US un cas équivalent...
    Après avoir essayé 'nohup' dans ma commande, Il semble que 'nohup' ne fonctionne pas en crontab, puisqu'il est associé au terminal, ainsi que '&'. (?)
    J'ai également essayé la commande PHP 'system', c'est pareil.

    Voici mes codes
    Crontab qui lance mon PHP
    php /var/www/admin/radios_start.php >> /var/www/admin/logs/log_crontab_radios_sctrans.txt 2>&1
    Commande PHP qui appelle le premier programme sc_trans en daemon
    ...boucle de lancement PHP (avec daemon)
    $cmd = '/var/www/admin/radios/R13/encodeur/sc_trans_R13 daemon /var/www/admin/radios/R13/encodeur/sc_trans_R13.conf';
    $out = exec($cmd, $r, $retval);
    ...
    A ce moment là, je n'ai plus la main, le programme attend...

    Un extrait du strace du PHP (si cela peux vous aider)
    write(4, "LANCEMENT DE LA RADIO: 13 BLUE "..., 64) = 64
    pipe2([5, 6], O_CLOEXEC) = 0
    clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f28645559f0) = 31592
    close(6) = 0
    fcntl(5, F_SETFD, 0) = 0
    read(5, "", 8192) = 0
    --- SIGCHLD (Child exited) @ 0 (0) ---
    close(5) = 0
    wait4(31592, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 31592
    write(4, "OK - RADIO NON ACTIVE PID NON TR"..., 46) = 46
    pipe2([5, 6], O_CLOEXEC) = 0
    clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f28645559f0) = 31593
    close(6) = 0
    fcntl(5, F_SETFD, 0) = 0
    read(5, 0x10a2d40, 8192) = ? ERESTARTSYS (To be restarted)
    --- SIGCHLD (Child exited) @ 0 (0) ---
    read(5, "sc_trans going daemon with PID ["..., 8192) = 39
    write(1, "sc_trans going daemon with PID ["..., 39) = 39
    read(5,
    Ce que souhaite faire est-il faisable ? Ou peut être dois-je faire autrement ?
    Merci à tous pour votre aide précieuse car je suis dans l'impasse depuis plusieurs jours !

    P

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 57
    Par défaut
    J'ai trouvé pour ceux que cela pourrait intéresser dans l'avenir !

    Cela devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $cmd = '/usr/bin/nohup /var/www/admin/radios/R13/encodeur/sc_trans_R13 daemon /var/www/admin/radios/R13/encodeur/sc_trans_R13.conf process.out 2> process.err < /dev/null &';
    exec($cmd, $r, $retval);
    Voir php.net rubrique 'exec' function 3éme commentaires des users

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

Discussions similaires

  1. Lancer du javascript depuis du php
    Par pasqual dans le forum Langage
    Réponses: 4
    Dernier message: 06/01/2010, 16h44
  2. [Images] Lancer le scanner depuis PHP
    Par Guitch dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/09/2009, 15h07
  3. [Système] lancer un .bat depuis php
    Par Invité dans le forum Langage
    Réponses: 18
    Dernier message: 05/07/2006, 17h11
  4. Lancer un vbscript depuis PHP
    Par el_butcho dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2006, 11h22
  5. lancer un .reg depuis php
    Par tikaprod dans le forum Langage
    Réponses: 14
    Dernier message: 17/02/2006, 11h02

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