我正在使用 Ruby Daemon-kit 设置为我的 Rails 应用程序执行各种后台操作的服务。
当我在命令行上调用时它工作正常:
./bin/bgservice
如何为它创建一个守护进程 initd 启动脚本,以便它在重新启动时自动启动?
有几种方法:
您可以编写/etc/init.d/
可以放置在/etc/rc?.d/
目录中的脚本(或它们位于目标发行版上的任何位置)。关于这个机制的一些细节可以在Debian 政策指南和openSUSE initscript 教程中找到。在 initscripts 中有很多特定于发行版的特质,所以不要想写一个简单的并要求发行版贡献为他们的环境量身定制的“更好”的。(例如,任何 Debian 派生的发行版都将提供非常有用的start-stop-daemon(8)
帮助程序,但其他发行版严重缺少它。)
您可以为支持的发行版编写upstart
工作规范upstart
(我认为是 Ubuntu、Google ChromeOS、Fedora 等等?)。upstart
文档仍然很薄弱,但在 Ubuntu 上有一些细节和大量示例/etc/init/
,可能在其他使用upstart
. 获得正确的依赖关系可能是跨所有发行版的一些工作,但upstart
作业规范看起来比 initscripts 更容易编写和维护。
/etc/inittab
您可以在仍支持标准 SysV-initinittab(5)
文件的发行版上添加行。这仅在您的程序不执行通常的守护进程fork(2)
//咒语时才有用,因为setsid(2)
它使用它获取的 pid来确定您的程序是否需要重新启动。fork(2)
init
fork(2)
现代 Vixiecron(8)
支持文件中的@reboot
说明符crontab(5)
。系统 crontab 和用户 crontabs 都可以使用它,如果您只想将程序作为常用登录帐户运行,这可能会很好。
作为 daemon-kit 的作者,我避免制作任何 init 风格的脚本,因为要应对各种发行版,它们是从旧的 init-V 风格迁移到新的 upstart/insserv,让自己免于一场噩梦。
我建议这样做是使用 God 配置生成器,并确保 God 在启动时启动(通过 runit 或其他方式),并且 God 最初启动守护程序并使其保持运行。
充其量我会扩展 daemon-kit 以便能够生成用于启动的 runit 脚本......
HTH。