web-dev-qa-db-ja.com

バックグラウンドでPHPスクリプトを実行する

バックグラウンドでphpスクリプトを実行するために、次のコマンドラインコードを試しました。

php server.php &

これは動作します。問題は、コンピューターのターミナルウィンドウを閉じると、phpスクリプトも停止することです。 「無限」に実行したい。これはWebSocketサーバーなので、常に実行する必要があります。

どうすればこれを達成できますか?

前もって感謝します!

編集:私はすでに答えを見つけました(この質問方法を早めに推測しました)。

Nohup php server.php &
1
yesterday

screenを使用して、スクリプトを実行できる仮想端末を開くことができます。

screen -S php_scriptを使用することをお勧めします。その後、スクリプトを実行できます(&がなくても)。 CTRL + A、Dを使用して、端末から切断できます。 screen -rで端末に再接続できます。

2
Boba Fit

Boba Fitの回答が役立ちますが、サーバーをバックグラウンドで実行するより良い方法があると思います。再起動の場合は、おそらくサーバーを再度実行する必要があります。

同様のユースケースで Supervisor を使用しました。私の場合、 JMSJobQueueBundle を使用してバックグラウンドタスクをスケジュールするのは、長時間実行されるPHPプロセスでした。

セットアップする必要があるのはスーパーバイザーであり、プロセスを構成するだけです。

[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