我计划从 Solaris/x86 迁移到 RHEL6。迁移的一部分是将服务从 SMF 迁移到 RHEL6 等效版本(似乎是 upstart)。虽然 init.d 脚本似乎仍受支持,但我想利用更复杂的 init 守护进程,尤其是对于作业监督(重新启动等)等功能。我想就以下几点收集一些想法:
1) upstart 是否是一个合适的作业管理器,即它是否不需要像 daemontools/supervise 这样的独立管理器?
2) 与典型的 init.d 脚本相比,Upstart 脚本似乎非常简单。如果我将 init.d 脚本移植到 Upstart,只需“exec /etc/init.d/myjob start”就可以了吗?这包括 RHEL 安装的程序,例如 httpd。
3) upstart 是否对 pid 文件做了什么,以及它对进程的分叉模型有何期望?
4) 有没有关于 Upstart 进程管理方面的直接指南...我的意思是控制重启的条件?例如,在进程进入维护状态之前要重新启动多少次,或者忽略受监督进程的子进程中的错误/核心转储。
如有任何其它相关想法或指南,我们将不胜感激。
短暂性脑缺血发作
答案1
不要在 RHEL6 上使用 upstart 的任何“高级”功能。它只使用 upstart 作为原始 SysVinit 的“替代品”,并且只使用旧式 init 脚本。RHEL 本身没有利用任何新的 upstart 功能,RHEL7 也不包含 upstart。事实上,除了 Ubuntu(只是因为他们发明了它)和 Debian,现在几乎所有人都放弃了 upstart。RHEL7 使用 systemd,许多其他现代 Linux 发行版现在都在使用它,而 Debian 正在切换中。
为了使您的脚本经得起未来的考验,请编写一个“普通”的 init 脚本;这些脚本也支持 systemd 以实现向后兼容,尽管与 RHEL6 中的 upstart 不同,systemd 的新功能实际上已在 RHEL7 中使用。互联网上有许多关于编写 SysVinit 脚本的教程;非常好的一个由 Fedora 项目提供。当您迁移到 RHEL7 时,您可以根据需要切换到 systemd 单元文件。