web-dev-qa-db-ja.com

supervise / daemontoolsがApache-DFOREGROUNDと競合する

誰かが私たちがこの行動を理解するのを手伝ってくれることを願っています。

/ 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/Apache2pをもたらすことがわかりました。それ自体を含め、他のサービスはすべてダウンしていました。

FOREGROUNDをNO_DAEMONIZEに変更すると動作が修正されますが、何が起こっているのかを本当に理解したいと思います。 oneサービスのsvc -dotherサービスを起動する理由を誰かが説明できますか?

あなたが提供できる手がかりをありがとう。

1
Kevin G.

私にとっては、-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を実行するために推奨されているものですデーモンツールの下で(義務「それをしないでください」が先行します)-これらの違いのいずれかがあなたが説明する動作を引き起こす理由はわかりません。

1
voretaq7