2014-02-27 37 views
7

我想创建一个服务/脚本来自动启动和控制我的nodejs服务器,但它似乎并没有工作。Upstart/init脚本不工作

首先,我用这个源作为主要参考http://kvz.io/blog/2009/12/15/run-nodejs-as-a-service-on-ubuntu-karmic/

测试周围后,我minimzed实际的文件的内容,以避免任何类型的错误,导致这种(最低限度,但它不工作)

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

当试图启动脚本(如根,或普通用户),我得到:

[email protected]:/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

你确定你在/ usr/local/bin/nodejs有一个文件? –

+0

@MattPileggi该死的,你是对的......它不见了。嗯,奇怪,我记得用那种方式使用nodejs - 让我试试其他的东西。结果:没有改变 - 我将命令直接更改为'nodejs',甚至删除了'sudo -u'部分以root身份执行 - 没有任何更改。我试图通过控制台直接调用该命令 - 该工作。 – user169099

+0

抱歉,不知道还有什么要看。我将所有的init脚本都设置为使用Forever,它负责保持它的运行。你有没有看过这个? –

回答

-3

从Ubuntu 15开始,upstart不再使用,请参阅systemd。

0

这就是我们典型的启动脚本的样子。正如您所看到的,我们正在将我们的节点进程作为用户nodej运行。我们还使用预启动脚本来确保所有日志文件目录和.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