不久前,我开始使用 Cherokee 托管网站。对于外部源(FastCGI 等),如果找不到在指定套接字或端口上运行的进程,它可以选择启动进程。这很棒,因为这意味着如果 PHP 或 Django 站点发生故障(它们偶尔会发生故障),它会自动重新启动。
在使用 PHP-FPM 的新服务器上,我无法使用 Cherokee(它有一个 PHP 错误),因此我已转移到 NGINX。我真的很喜欢 NGINX(因为它的配置风格),但是我遇到了进程崩溃并且永远不会重生的严重问题。PHP 有时会这样做,但 Django 站点更像是一个问题。我已经为它们创建了 init 脚本,它们在启动时出现,但是如果它们在重新启动之间出现故障,这对我没有帮助。
我想我正在寻找 FastCGI 代理。像切诺基这样的东西,知道哪些进程应该在哪些套接字/端口上运行并按需重新生成它们。这样的事情存在吗?有没有办法将它构建到 NGINX 中(为了便于配置)?
根据我的研究,Supervisor 和 Systemctl 似乎不能互换,但是它们具有重叠的功能;值得注意的是,它们都可以用于启动其他进程。但是,Supervisor 能够重新启动因任何原因而死亡的应用程序。我找不到任何表明 systemctl 能够做到这一点的东西。
Systemctl 可以用来重启已经死掉的进程吗?
此外,在我看来,大多数人会,例如,将 Postgres 和 Nginx 或 Apache 添加到 Systemctl,但会将他们的应用程序添加到主管。为什么是这样?他们不应该将所有这些都添加到 Supervisor 中,以便 Supervisor 在他们死后可以重新启动它们吗?
是否有任何命令/脚本可以在进程崩溃或终止时自动写入以重新启动进程(在识别进程 ID 之后)。
例如,我正在运行一个可执行的 bin 文件,并希望在每次崩溃或被杀死时自动重新启动。