追加読書

追加読書

私のnginxユニットファイルは次のとおりです。

[root@arif ~]# cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

ここでこの[Service]セクションでの値は次Typeのとおりです。forkingここ

ExecStartで始まるプロセスは、サービスの基本プロセスとなるサブプロセスを作成します。開始が完了すると、親プロセスが終了します。

私の質問は、

  • サービスがなぜこのようなことをするのか?
  • これにはどのような利点がありますか?
  • Type=simpleそれとも、他の同様のオプションにはどのような問題がありますか?

ベストアンサー1

サービスがなぜこのようなことをするのか?

平均サービス欲しくない実際にそうしてください。これは良い習慣ではなく、「デーモン」の考えが実際に間違っているという事実に加えて、サービスは何をすることができますか?forking契約によって要求されない。彼らが実際にやっていたことからプロトコルが間違っていました。その他、これはforkingプロトコルに含まれており、通常は不要です。

これにはどのような利点がありますか?

いいえ。より良いコントラスト通知プロトコルが存在しますが、実際に話す人はいません。これプロトコルは正しいです。そうするのが有利なので、サービスはそうしません。

Type=simpleそれとも、他の同様のオプションにはどのような問題がありますか?

何もありません。実際、一般的に言えば、準備プロトコルはforking誤って使用されます。他の答えで述べたように、これはベストプラクティスではありません。正反対。

単純な事実は、それが悪いことの最善であり、nginxのまだブロックできない行動からの避難所であるということです。今日、IBM SRC、daemontools、およびその他の深刻なサービス管理の分野での励ましのおかげで、ほとんどのサービスソフトウェアにはオプションがあり、さらに基本的な動作も変更され、もはや愚かなことを「デーモン化」しようとしません。すでにデーモンのコンテキストにあります

しかし、nginxの場合はまだそうではありません。 daemon off残念ながら動作しません。多くのソフトウェアが「ビデモン」モードをデバッグモードと誤って混同したように(しかし一般的にこれ以上そうしない)、nginxは残念ながら制御信号を処理しないなど他のものと混同します。これまで人々はこの仕事を5年間やってきました。

追加読書

おすすめ記事