このトピックに関する多数のスレッドを読み、遭遇したほぼすべてのものを試しました: > /dev/null
、qx、system、exec、fork、cmd with | (これは win32 で動作しましたが、現在は prefork MPM を使用する CentOS に移植しています)、echo | 現在、Proc::Daemon を使用していますが、Apache2::Subprocess は試していません。これは、親に結び付けられたスレッドであり、まさに私が望まないものであるように思われるからです。
私の状況は違うのかもしれません。長時間実行されるデータベースの復元プロセスの最後に、スクリプトが実行されているサービスそのものを再起動したいと考えています。httpd
そのような設計の知恵の問題はさておき、どうすればこれを行うことができますか? 私が試したすべての方法は、sudo service httpd stop
半分を実行するとすぐにスクリプトを停止するsudo service httpd restart
ため、それ自体が再び開始されることはありません。
これに対する 1 つの例外は、echo | です。今のところ、これは有望に思えましたが、コマンド ラインで実行して mod_perl スクリプトで実行したときに機能するものをコピーすると、次のように成功したように聞こえる行が表示されjob 1 at 2013-10-31 19:20
ますが、その後は何も起こりません。を含むシェル メール、および/またはnow -m
を含むエラー メッセージはありません。通常は任意のモジュールでそれを行う自分のモジュールからの電子メールはありません。成功のラインにもかかわらず、ただの静かな失敗。2>&1
> /path/with/all/777/perms
die
それが役立つ場合、service httpd stop
実行されるものは次のとおりです。
stop() {
echo -n $"Stopping $prog: "
kill -TERM `cat ${pidfile}`
RETVAL=$?
if [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
then success
else failure
fi
echo
}
これは以前は非常に単純に思えましたが、提案された解決策はたくさんありますが、どれもそれを行うようには見えません。他に確認または試行することはありますか?