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
Commande PHP qui appelle le premier programme sc_trans en daemonphp /var/www/admin/radios_start.php >> /var/www/admin/logs/log_crontab_radios_sctrans.txt 2>&1
A ce moment là, je n'ai plus la main, le programme attend......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);
...
Un extrait du strace du PHP (si cela peux vous aider)
Ce que souhaite faire est-il faisable ? Ou peut être dois-je faire autrement ?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,
Merci à tous pour votre aide précieuse car je suis dans l'impasse depuis plusieurs jours !
P
Partager