web-dev-qa-db-fra.com

lancer un script php en tâche de fond

J'ai essayé le code de ligne de commande suivant pour exécuter un script php en arrière-plan.

php server.php &

Cela marche. Le problème est le suivant: si je ferme la fenêtre du terminal sur mon ordinateur, le script php s'arrête également. Je veux qu'il fonctionne "infini". C'est un serveur websocket, il doit donc fonctionner constamment.

Comment puis-je atteindre cet objectif?

Merci d'avance!

Edit: J'ai déjà trouvé la réponse (je suppose que cette question a été posée trop tôt).

Nohup php server.php &
1
yesterday

Vous pouvez utiliser screen pour ouvrir un terminal virtuel sur lequel le script peut être exécuté.

Je recommande d'utiliser screen -S php_script. Ensuite, vous pouvez exécuter votre script (même sans &). Avec CTRL + A, D, vous pouvez vous déconnecter de la borne. Vous pouvez vous reconnecter avec screen -r vers le terminal.

2
Boba Fit

Bien que la réponse de Boba Fit vous aide, je pense qu’il existe une meilleure façon de faire fonctionner votre serveur en arrière-plan. En cas de redémarrage, vous souhaiterez probablement que votre serveur soit à nouveau opérationnel.

J'ai utilisé Superviseur dans un cas d'utilisation similaire. Dans mon cas, la planification de tâches en arrière-plan à l'aide de JMSJobQueueBundle était un long processus PHP.

La seule chose que vous devez configurer est superviseur et configurer votre processus:

[program:your_websocket_server]
command=php server.php &
process_name=%(program_name)s
numprocs=1
directory=/tmp
autostart=true
autorestart=true
startsecs=5
startretries=10
user=www-data
redirect_stderr=false
stdout_logfile=%capistrano.shared_dir%/jms_job_queue_runner.out.log
stdout_capture_maxbytes=1MB
stderr_logfile=%capistrano.shared_dir%/jms_job_queue_runner.error.log
stderr_capture_maxbytes=1MB
0
Stephan Vierkant