我正在尝试将 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
......)