我正在尝试创建一个服务/脚本来自动启动和控制我的nodejs服务器,但它似乎根本不起作用。
首先,我使用此来源作为主要参考http://kvz.io/blog/2009/12/15/run-nodejs-as-a-service-on-ubuntu-karmic/
经过测试后,我最小化了实际文件的内容以避免任何类型的错误,导致这种情况(最低限度,但它不起作用)
description "server"
author "blah"
start on started mountall
stop on shutdown
respawn
respawn limit 99 5
script
export HOME="/var/www"
exec nodejs /var/www/server/server.js >> /var/log/node.log 2>&1
end script
该文件保存在/etc/init/server.conf
当尝试启动脚本时(以root或普通用户身份),我得到:
root@iof304:/etc/init# start server
start: Job failed to start
然后,我尝试使用init-checkconf
检查我的语法,结果是:
$ init-checkconf /etc/init/server.conf
File /etc/init/server.conf: syntax ok
我尝试了不同的其他内容,例如initctl reload-configuration
但没有结果。
我该怎么办?我怎样才能让它发挥作用?这不可能那么难,对吧?
答案 0 :(得分:0)
这是我们典型的启动脚本的样子。如您所见,我们将节点进程作为用户nodejs运行。我们还使用预启动脚本来确保使用正确的权限创建所有日志文件目录和.tmp目录。
#!upstart
description "grabagadget node.js server"
author "Jeffrey Van Alstine"
start on started mysql
stop on shutdown
respawn
script
export HOME="/home/nodejs"
exec start-stop-daemon --start --chuid nodejs --make-pidfile --pidfile /var/run/nodejs/grabagadget.pid --startas /usr/bin/node -- /var/nodejs/grabagadget/app.js --environment production >> /var/log/nodejs/grabagadget.log 2>&1
end script
pre-start script
mkdir -p /var/log/nodejs
chown nodejs:root /var/log/nodejs
mkdir -p /var/run/nodejs
mkdir -p /var/nodejs/grabagadget/.tmp
# Git likes to reset permissions on this file, but it really needs to be writable on server start
chown nodejs:root /var/nodejs/grabagadget/views/layout.ejs
chown -R nodejs:root /var/nodejs/grabagadget/.tmp
# Date format same as (new Date()).toISOString() for consistency
sudo -u nodejs echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/nodejs/grabagadget.log
end script
pre-stop script
rm /var/run/nodejs/grabagadget.pid
sudo -u nodejs echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/nodejs/grabgadget.log
end script
答案 1 :(得分:-1)
从Ubuntu 15开始,不再使用upstart,请参阅systemd。