私の調査では、SupervisorとSystemctlは互換性がないように見えますが、機能が重複しています。特に、どちらも他のプロセスを開始するために使用できます。ただし、スーパーバイザは、何らかの理由で停止したアプリケーションを再起動できます。 systemctlがこれを実行できることを示唆するものは何も見つかりません。
Systemctlを使用して、停止したプロセスを再起動できますか?
さらに、ほとんどの人は、たとえば、PostgresとNginxまたはApacheをSystemctlに追加しますが、アプリケーションをスーパーバイザーに追加するようです。どうしてこれなの?代わりに、これらすべてをスーパーバイザーに追加して、スーパーバイザーが死んだ場合にスーパーバイザーが再始動できるようにしないでください。
systemctl
は通常、systemd
の構成と制御に使用されるコマンドです。
Systemd nitには、プロセスが終了した場合の処理に関する指示を含めることができます。
たとえば、RedHat 7では、デフォルトのrsyslogdインストールに、次の内容のユニットファイルが含まれています。
[Service]
....
Restart=on-failure
その一部として。
man systemd.service
から:
Restart=
Configures whether the service shall be restarted when the service
process exits, is killed, or a timeout is reached. The service
process may be the main service process, but it may also be one of
the processes specified with ExecStartPre=, ExecStartPost=,
ExecStop=, ExecStopPost=, or ExecReload=. When the death of the
process is a result of systemd operation (e.g. service stop or
restart), the service will not be restarted. Timeouts include
missing the watchdog "keep-alive ping" deadline and a service
start, reload, and stop operation timeouts.
Takes one of no, on-success, on-failure, on-abnormal, on-watchdog,
on-abort, or always. If set to no (the default), the service will
not be restarted.
systemd
は比較的新しいものであり、人々はその機能を認識していない可能性があります。さらに、ユーザーがser単位を認識していない可能性があります。これにより、ユーザーは独自の操作を実行できます。
supervisord
ははるかに古いプログラムであるため、10年間このプログラムを使用してきており、変更の必要はないと考えている人もいます。