最初のsystemd
ユニットファイルを作成しています。
以下のためにType
、いくつかの選択肢がありますforking
、simple
など私が読んで持っているRedHatのドキュメントこのトピック(表9.9)上を、私はどのオプションを使用する必要があるとき、まだ確認していません。
ガイドラインはありますか?
最初のsystemd
ユニットファイルを作成しています。
以下のためにType
、いくつかの選択肢がありますforking
、simple
など私が読んで持っているRedHatのドキュメントこのトピック(表9.9)上を、私はどのオプションを使用する必要があるとき、まだ確認していません。
ガイドラインはありますか?
回答:
コマンドラインからサービスを手動で開始する場合(nohup
プレフィックスコマンドまたは&
サフィックスを使用せずにバックグラウンドで実行する、つまり、ファイルのExecStart=
行に配置するコマンドを実行するだけ.service
)、どうなりますか?
a)サービスが開始して実行を継続し、Control-Cを押すか他の方法でサービスを停止するまでプロンプトが戻らない場合Type = simple
は、正しい選択です。
b)プロンプトが返されても、サービスがバックグラウンドで実行され続ける(つまり、サービスがそれ自体でデーモン化する)場合Type = forking
は、正しい選択です。
c)サービスがジョブを実行し、何も実行せずにプロンプトに戻る場合(つまり、サービスが一部のカーネル設定を調整する、他の何かにコマンドを送信する、または同様のことを行う)、Type = oneshot
おそらく正しい選択です。この場合、ExecStart
サービスの何かを「設定」するコマンドである可能性がExecStop
あり、それを「設定解除」する対応するコマンドになります。このタイプは通常の利点がRemainAfterExit=true
あるため、systemdは、最近の「設定」または「設定解除」に応じて、このサービスの「状態」を追跡します。
他のType
値は特別な場合です。たとえば、サービスがD-Bus接続を利用している場合Type = dbus
、最適な選択になる可能性があります。それはsystemd
事実を認識し、systemdはD-Bus上のこのサービスの存在によってこのサービス(およびそれに依存するもの)を追跡します。
を使用するにType = notify
は、プロセスは環境変数で指定されたUnixソケットに接続し、$NOTIFY_SOCKET
必要に応じてそのソケットにメッセージを書き込むことでステータスを報告できる必要があります。また、サービスファイルはNotifyAccess
、必要に応じて通知ソケットへのアクセスを許可するオプションを指定する必要があります。
これらのメッセージを送信するために使用できるコマンドラインユーティリティsystemd-notify
とCライブラリ関数sd_notify(3)
がありますが、どちらも要件に合わない場合は、独自のメッセージ送信者を実装できます。必要なメッセージは非常に単純で、シェル変数の割り当てのように見えます。たとえば、サービスが正常に起動を完了し、着信要求を処理する準備ができていることを通知するには、サービスはprintf "READY=1\n"
ソケットの出力に相当する文字列を送信する必要があります。参照man 3 sd_notify
認識メッセージの詳細については。
注:多くのUnixスタイルのシステムに移植できるように設計された多くのサービスアプリケーションは、デフォルトでb)として動作しますが、a)オプション(通常「フォークしない」、「キープランニング」フォアグラウンドで」、「デーモン化しないで」など。その場合、オプションに他の副作用がなければ、オプションを追加し、a)タイプの動作を使用することが望ましいでしょうsystemd
。
apachectl start
おそらくルートとして実行することで?やってみて、何が起こるか見てみましょう。次に、回答からa)、b)、またはc)を選択します。プロンプトが返され、Apacheが実行されたままなので、b)が答えになると思います。
Type=notify
か?
Type=notify
追加の説明。
apache
使用すべきタイプ、?