web-dev-qa-db-ja.com

Systemctlは、停止したプロセスを再起動できますか、それともスーパーバイザが入ってくるプロセスですか?

私の調査では、SupervisorとSystemctlは互換性がないように見えますが、機能が重複しています。特に、どちらも他のプロセスを開始するために使用できます。ただし、スーパーバイザは、何らかの理由で停止したアプリケーションを再起動できます。 systemctlがこれを実行できることを示唆するものは何も見つかりません。

Systemctlを使用して、停止したプロセスを再起動できますか?

さらに、ほとんどの人は、たとえば、PostgresとNginxまたはApacheをSystemctlに追加しますが、アプリケーションをスーパーバイザーに追加するようです。どうしてこれなの?代わりに、これらすべてをスーパーバイザーに追加して、スーパーバイザーが死んだ場合にスーパーバイザーが再始動できるようにしないでください。

8
Matthew Moisen

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年間このプログラムを使用してきており、変更の必要はないと考えている人もいます。

14
Stephen Harris