J'essaie d'exécuter les processus php en arrière-plan et de lancer ceci à partir d'un fichier php.nohup: exécute le processus PHP en arrière-plan
Quelques informations: PHP Version 5.2.17, php safe_mode est désactivé, système linux. Je démarre le processus avec exec, j'ai déjà essayé shell_exec. Je mets tous les fichiers à 0755, 0777.
$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");
Si j'imprimer cette déclaration, je reçois cela et le pid est correct:
nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!
Si je regarde les processus sous ssh avec
top
Je vois mon processus php5 avec le bon pid. l'utilisateur est root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5
3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3542 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3545 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3548 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3551 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
si je commence la partie supérieure du manuel de processus ressemble à ceci:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8141 xxxxxxxx 22 2 24048 9.9m 5344 S 10 0.5 0:00.31 php5
Le problème: il semble que rien happens.To déboguer un peu i a écrit une sortie en le fichier
ob_start();
echo "STARTING...";
writeLog(ob_get_contents());
//...
function writeLog($info){
$handle = fopen("file.log", "a+");
fwrite($handle, $info);
fclose($handle);
}
exit;
Aucun journal dans mon fichier. Si je démarre ce fichier dans mon navigateur, il traite correctement et récupère mon fichier file.log avec les informations de "débogage".
Pourquoi cela fonctionne dans le navigateur et non sur la commande exec/shell_exec ??! J'ai exactement ces processus PHP avec pid correct, mais aucun résultat.
Merci beaucoup pour votre aide!
Vous devez d'abord essayer de fournir un chemin absolu au script que vous essayez d'exécuter, et non un chemin relatif comme vous semblez le faire maintenant. C'est à dire. utilisez 'nohup/usr/local/bin/php5 /absolute/chemin/vers/fichier.php>/dev/null 2>/dev/null & echo $!' – wimvds
J'ai le chemin absolu vers ce fichier. Je peux commencer ce nohup de chaque répertoire dans ssh. ça marche. malheureusement pas avec php. – stoe
Ensuite, cela pourrait être un problème d'autorisation. Vérifiez donc vos journaux (Apache, journal des erreurs php, journal de la console) ... Si vous exécutez AppArmor/SELinux, essayez de le désactiver pour tester si vous devez modifier votre politique de sécurité pour autoriser ces tâches en arrière-plan. – wimvds