我一直在查找有关在 Linux 上运行后台进程的信息。基本要求是:
此外,某些进程需要不是连续运行,而是需要定期运行。这当然是 cron 的工作,而且很可能我会用它来做这件事。但对于连续过程,情况就不同了。
在 Mac OS X 上,我为此使用了 launchd。Launchd 是在 Mac OS X 上启动进程的规范方法。操作系统将它用于所有系统服务,所以我对依赖它毫不犹豫。到目前为止,我还没有为 Linux 找到类似的系统。各种发行版似乎都有自己的方法(Ubuntu 的新贵等),但我仍然找不到关于 /etc/rc.local、/etc/init.d/rc.local、/etc/initd 如何的直接答案/rc.local 或 /etc/init 都相关以及它们之间的区别是什么。它们在每个系统上都不同。再加上“服务启动/停止 x”不适用于所有系统(谷歌在这里没有帮助)这一事实,你有我所说的一团糟。
我想要的是一个可以保存我的脚本的地方,我可以在其中重新启动系统并在启动时将它们作为守护程序启动(在任何用户登录之前),然后在它们终止时自动重新启动它们。而且我希望它坚如磐石,可靠并与多个发行版完全兼容,而不是像暴发户那样事后诸葛亮。
这甚至可能吗?
抱歉,Linux 发行版(为了让自己与众不同并使系统管理员难以为继)每个都标准化,以不同的方式执行启动操作。
最接近 Linux 启动脚本的“跨发行版标准”的是System V 风格的运行级别。这些在某些系统上已被弃用(例如 Ubuntu 的官方立场是您应该使用 Upstart),但它们仍然有效,并且可能会持续很长时间。
如果您的守护程序崩溃,SysV init 脚本不会处理“自动重新启动”——它们会启动一个预计会自行处理的守护程序。
如果您想要监督,您需要编写/包含您自己的监督框架。
(或者,只需编写一个不会崩溃的像样的软件,这是处理此问题的传统 Unix 方式。如果您的守护进程非常不稳定,需要额外的监督以不断重新启动它,这通常意味着您需要做更多的工作使其具有生产质量。)