Systemd

Systemctl 可以重新啟動已經死亡的程序,還是 Supervisor 進來的地方?

  • September 18, 2016

根據我的研究,Supervisor 和 Systemctl 似乎不可互換,但是它們具有重疊的功能;值得注意的是,它們都可以用來啟動其他程序。但是,Supervisor 能夠重新啟動因任何原因而死亡的應用程序。我找不到任何表明 systemctl 能夠做到這一點的東西。

Systemctl 可以用來重啟已經死掉的程序嗎?

此外,在我看來,例如,大多數人會將 Postgres 和 Nginx 或 Apache 添加到 Systemctl,但會將他們的應用程序添加到主管。為什麼是這樣?他們不應該將所有這些都添加到主管中,以便主管在他們死後可以重新啟動它們嗎?

systemctl通常是用於配置和控制的命令systemd

一個 systemd單元可以包含關於如果程序終止應該做什麼的指令。

例如,對於 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相對較新,人們可能不知道它的功能。此外,他們可能不知道允許使用者做自己的事情 的使用者單元。

supervisord是一個更老的程序,所以人們可能更清楚這一點,已經使用了十年,並且認為沒有任何改變的必要。

引用自:https://unix.stackexchange.com/questions/310706