99 votes

Est-il possible d'utiliser shell_exec sans attente pour la commande à remplir?

J'ai un processus intensif de la tâche que je voudrais exécuter en arrière-plan.

L'utilisateur clique sur une page, le script PHP s'exécute, et enfin, en fonction de certaines conditions, si besoin est, alors qu'il a à exécuter un script shell, E. G.:

shell_exec('php measurePerformance.php 47 844 email@yahoo.com');

Actuellement, je utiliser shell_exec, mais cela nécessite le script d'attendre une sortie. Est-il possible d'exécuter la commande que je veux sans attendre qu'il termine?

155voto

jitter Points 35805

Que diriez-vous d'.

"> /dev/null 2>/dev/null &"

shell_exec('php measurePerformance.php 47 844 email@yahoo.com > /dev/null 2>/dev/null &');

Remarque ce se débarrasse aussi de la stdio et stderr.

28voto

Brent Baisley Points 320

Cela permettra d'exécuter une commande et vous déconnecter du processus en cours d'exécution. Bien sûr, il peut être n'importe quelle commande que vous voulez. Mais pour un test, vous pouvez créer un fichier php avec un sleep(20) de commande.

exec("nohup /usr/bin/php -f sleep.php > /dev/null 2>&1 &");

12voto

Oytun Tez Points 126

Vous pouvez également donner à votre sortie de retour vers le client immédiatement et poursuivre le traitement de votre code PHP par la suite.

C'est la méthode que j'utilise pour le long temps d'attente des appels Ajax qui n'aurait pas d'effet sur le côté client:

ob_end_clean();
ignore_user_abort();
ob_start();
header("Connection: close");
echo json_encode($out);
header("Content-Length: " . ob_get_length());
ob_end_flush();
flush();
// execute your command here. client will not wait for response, it already has one above.

Vous pouvez trouver l'explication détaillée ici: http://oytun.co/response-now-process-later

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X