如何像 Apache 一样将二进制文件设置为在启动时初始化(作为服务运行)

如何像 Apache 一样将二进制文件设置为在启动时初始化(作为服务运行)

我正在尝试将 PhantomJS 设置为以服务形式运行。我在 /etc/init.d 中找到了骨架文件,并且正在 Ubuntu 12.10 上运行。在尝试解决这个问题时,我在 /etc/rc*.d 目录中找到了符号链接,并发现 Apache 在运行级别 2 到 5 上运行。

我的问题是,我是否只需在 2 到 5 个文件夹中创建一个名为 S02phantomjs 的符号链接,并将其指向我放入 /etc/init.d 的脚本?还是我应该使用某个应用程序来配置它?

我担心我遗漏了一些东西。而且数字部分的顺序非常重要,我不想弄乱。

此外,我不确定是否还需要做其他事情才能确保它在每次启动时都能运行。而且要让它现在就开始运行。

最后一个问题。我的脚本基于骨架,当我在终端中运行它时,它只是静止并等待,就像我正常运行 PhantomJS 时一样。我想让它像 Apache 一样在后台运行。我必须采取什么不同的措施才能实现这一点?

谢谢大家!

答案1

由于 PhantomJS 不会提供任何运行守护进程的支持盒子外面/etc/init.d/skeleton,您应该自己处理您的服务。您找到并使用它来创建 init 脚本,这很棒。您所描述的内容表明您的进程不会进入后台,这可以通过某些包装器来解决。这可以是start-stop-daemon特定于基于 debian 的发行版的包装器,也可以是daemon可以重定向 stdin/stdout 并处理其他情况的单独软件包。

因为我几乎确信您使用传统方式编写初始化脚本,所以我怀疑您可能只会添加--background到您的 start-stop-daemon 命令中。

修复完脚本后,请检查该脚本是否由root:root权限为 0755 的用户所有(例如rwxr-xr-x)。之后,update-rc.d使用 Michael Hampton 在其回答中提供的命令更新 sysvinit 符号链接。

需要注意的是,还有一些其他工具支持将进程发送到后台,可能在其他情况下有用。例如,导师暴发户systemd支持这一点。请参阅其文档以获取确切的语法。如果您要使用其中之一,则无需编写完整的初始化脚本。

当然,初始化脚本是最古老并且最受支持的启动守护进程的方式。

答案2

如果初始化脚本已经存在并且编写正确,则应该可以像任何其他初始化脚本一样正常启用它:

update-rc.d phantomjs defaults

或 (12.04+)

update-rc.d phantomjs enable

(当您安装及其同类的软件包时,这通常是默认完成的apt-get......)

相关内容