誰かが私たちがこの行動を理解するのを手伝ってくれることを願っています。
/ etc/service /の下にたくさんのdaemontoolsサービスがあります。サービスの1つがApacheを制御し、実行スクリプトにはこれが含まれています。
exec envdir /var/lib/supervise/wwwproxy/env setuidgid root bash <<-BASH
ulimit -n 8192 # also increase the running user's file descriptor limit
exec Apache2 -f /path/to/demo_Apache2.conf -D FOREGROUND
BASH
svc -d /etc/service/*
が実際にすべてのサービスを再起動する効果があり、サービスが停止しないという問題がありました。最終的にその1つのサービスまで追跡したところ、svc -d /etc/service/Apache2
がpをもたらすことがわかりました。それ自体を含め、他のサービスはすべてダウンしていました。
FOREGROUNDをNO_DAEMONIZEに変更すると動作が修正されますが、何が起こっているのかを本当に理解したいと思います。 oneサービスのsvc -d
がotherサービスを起動する理由を誰かが説明できますか?
あなたが提供できる手がかりをありがとう。
私にとっては、-D NO_DAEMONIZE
が機能しなかったため、-D NO_DETACH
を使用する必要がありました。 (CentOS 6.3、Apache/2.2.15)
参照 http://httpd.Apache.org/docs/2.2/programs/httpd.html :
また、-DNO_DETACH(親がフォークするのを防ぐ)や-DFOREGROUND(親がsetsid()などを呼び出さないようにする)など、あまり一般的ではない特定の起動パラメーターを設定するためにも使用できます。
私の提案はApacheを実行するためにdaemontoolsを使用しないですが、その代わりに実行スクリプトを単純化する必要があります。
最小限の最低限のものから始めます。
#!/bin/bash
exec Apache2 -f /path/to/httpd.conf -D NO_DAEMONIZE
envdir
を使用する必要がある/使用したい場合は、exec
の代わりにそれを使用してApacheを起動できます。ulimit
呼び出しはおそらく必要ありませんが、Apacheを起動する前に実行スクリプトのどこにでも追加できます。
Re:あなたが見ている実際の奇妙な振る舞い、そこにare-DFOREGROUND
と-DNO_DAEMONIZE
の間にいくつかの機能的な違いがあります-後者は私がいつもApacheを実行するために推奨されているものですデーモンツールの下で(義務「それをしないでください」が先行します)-これらの違いのいずれかがあなたが説明する動作を引き起こす理由はわかりません。