いいえ、プロセスPIDを「割り当てる」ことはできません。代わりに、「実際の」デーモンと同じように実行する必要があります。スクリプトに独自のPIDをファイルに保存させ、強制終了する必要があるときにそのファイルから読み取ります。
別の方法は、スーパーバイザーのようなものを使用することです。これは、これらすべてを非常に優れた方法で処理します。
更新-スーパーバイザー構成
スーパーバイザーについて言及したので、ここに、その仕事をするための短いスーパーバイザー構成ファイルも投稿します。
[program:yourscriptname]
command=/usr/local/php5/bin/php -f /home/path/to/php_script.php
その他の構成オプションについては、こちらをご覧ください。
次に、次のように使用できます。
# supervisorctl status
プロセスのステータスを表示します。
# supervisorctl start yourscriptname
スクリプトを開始するには
# supervisorctl stop yourscriptname
スクリプトを停止します
更新-実際のスーパーバイザー構成例
まず第一に、あなたがあなたの中にこれを持っていることを確認してください/etc/supervisor/supervisord.conf
。
[include]
files = /etc/supervisor/conf.d/*.conf
そうでない場合は、これらの2行を追加して
mkdir /etc/supervisor/conf.d/
次に、起動するプロセスごとに構成ファイルを作成します。
/etc/supervisor/conf.d/script1.conf
[program:script1]
command=/usr/local/php5/bin/php -f /home/path/to/php_script.php
stdout_logfile=/var/log/script1.log
stderr_logfile=/var/log/script1-error.log
/etc/supervisor/conf.d/script2.conf
[program:script2]
command=/usr/local/php5/bin/php -f /home/path/to/php_script2.php
stdout_logfile=/var/log/script2.log
stderr_logfile=/var/log/script2-error.log
...など。すべてのスクリプトに対して。
(トレーリングは必要ありません。スーパーバイザーがすべてのデーモン化を処理するため、実際には、スーパーバイザー内で自己デーモン化するプログラムを実行しないでください)。
次に、すべてを次のように開始できます。
supervisorctl start all
または、次のようなものを1つだけ使用します。
supervisorctl start script1
PHPからスーパーバイザーを開始
もちろん、スクリプト内からでも、上記の2つのコマンドを使用して、スーパーバイザーが制御するプロセスを開始/停止できます。
ただし、root権限が必要になることを忘れないでください。たとえば、許可するのは非常に危険です。サーバー上でrootとしてコマンドを実行するためのWebページ。
その場合は、スーパーバイザーを通常のユーザーとして実行する方法の説明を参照することをお勧めします(私はこれを行ったことはありませんが、www-dataユーザーとしても実行できるはずです)。