根据我的研究,Supervisor 和 Systemctl 似乎不可互换,但它们具有重叠的功能;值得注意的是,它们都可以用来启动其他进程。但是,Supervisor 能够重新启动因任何原因而终止的应用程序。我找不到任何表明 systemctl 能够做到这一点的东西。
Systemctl 可以用来重新启动已经死亡的进程吗?
此外,在我看来,大多数人会将 Postgres 和 Nginx 或 Apache 添加到 Systemctl,但会将他们的应用程序添加到 Supervisor。为什么是这样?难道他们不应该将所有这些添加到 Supervisor 中,以便 Supervisor 可以在它们死掉时重新启动它们吗?
答案1
systemctl
通常是用于配置和控制的命令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
是一个更老的程序,所以人们可能更意识到这一点,已经使用它十年了,并且认为没有任何改变的必要。