これはおそらくこれを行うための最良または最適な方法ではないことを認識していますが、以前にどこかでこれに遭遇したことがあり、答えに興味があります。
私は、実行され、時々死ぬinitから呼び出されるperlスクリプトを持っています。これをすばやくデバッグするために、基本的に
#$path set from library call.
while(1){
system("$path/command.pl " . join(" ",@ARGV) . " >>/var/log/outlog 2>&1");
sleep 30; #Added this one later. See below...
}
コマンドラインからこれを起動すると、正常に動作し、期待どおりに動作します。command.pl が呼び出され、スクリプトは基本的にそこで停止し、子プロセスが停止してから再び実行されます。
ただし、起動スクリプトから (実際には start-stop-daemon を介して) 呼び出されると、システム コマンドはすぐに戻り、command.pl は実行されたままになります。その後、別の方向に進みます。そして何度も何度も。(これは sleep コマンドがないと楽しくありませんでした。) ps は、(多数の) command.pl の親が、ラッパー スクリプトの ID ではなく 1 であることを明らかにします (これは、コマンド ラインから実行した場合です)。
何が起こっているか知っている人はいますか?