my_script
バックグラウンドでUnixシェルスクリプト(unix)を実行し、Webインターフェイスでそれを監視する必要があります。
次のようにPHPで実際のスクリプトを起動します。
$command = 'my_script';
$pid= exec("nohup {$command} > {$logFile} & echo $!");
その後、$pid
私のプロセスのpidを含む、そのプロセスがまだ実行されていることを確認できますfile_exists("/proc/{$pid}")
。
しかし、問題は、プロセスが終了するタイミングと終了時に実行された時間をどのように理解できるかです。
また、プロセスがいつ開始されるのかを知るための良い方法はありますか?呼び出しの前後にPHPでタイムスタンプを記録できますが、多少不正確になる可能性がありexec
ます。
編集する:
明確にすると、PHPスクリプトはシェルスクリプトが完了するのを待つことはできません。シェルスクリプトはバックグラウンドで実行する必要があります。おそらくmy_script
3つのコマンド(ログの開始時間、実行時間、ログの完了時間)をシェルにラップしてsh -c
に渡すこともできますがnohup
、開始時間だけを記録することで終わらないように、シーケンス全体が原子的になりたい(すべて)エラーです。
ベストアンサー1
中間シェルを削除し、直系の子で始める必要があります。おそらくこれに似たものを使用しますproc_open
(私はPHPの専門家ではありません)。その後、SIGCHLD
子が終了すると表示されます。シグナルハンドラをインストールし(pcntl_signal
おそらく)、その中に子供のPIDを非遮断の方法でWNOHANG
待機することができます。pcntl_waitpid
file_exists("/proc/{$pid}")
wait
通話を制御しない場合(pid
子供でない場合)、PIDはリサイクルされ、信頼できません。