我有一个 node.js 脚本,它需要在启动时启动并在 www-data 用户下运行。在开发过程中,我总是用以下方式启动脚本:
su www-data -c 'node /var/www/php-jobs/manager.js
我确切地看到了发生了什么,manager.js 现在很好用。搜索所以我发现我必须把它放在我的/etc/rc.local
. 此外,我学会了将输出指向日志文件并将其附加2>&1
到“将 stderr 重定向到 stdout”,它应该是一个守护进程,因此最后一个字符是&
.
最后,我的/etc/rc.local
样子是这样的:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su www-data -c 'node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1 &'
exit 0
如果我自己运行它 ( sudo /etc/rc.local
):是的,它有效!但是,如果我执行重新启动没有node
进程正在运行,/var/log/php-jobs.log
不存在,因此,manager.js 不起作用。怎么了?
我最终得到了upstart,效果很好。
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生变化(在这种情况下,链接已损坏,因此您的答案无效),仅链接答案可能会无效。
该链接不起作用。根据upstart.ubuntu.com:“项目仅处于维护模式。没有正在开发新功能,一般建议是转移到另一个最小的初始化系统或 systemd。”