用upstart把node.js应用封装为系统服务示例

发布时间:2020-07-28编辑:脚本学堂
本文介绍了使用upstart把nodejs应用封装为系统服务的例子,有需要的朋友参考下。

一、nodejs应用普通部署方式
终于要把nodejs应用程序部署上线了, 把源代码通过git复制到目录下。
 

复制代码 代码示例:
/root/deploy/movie

然后搞命令:
 

复制代码 代码示例:
~ cd /root/deploy/movie
node ./app.js

上面的方式,nodejs程序会在当前的console界面中运行,一旦console结束,应用也会停止。

改一下命令,让程序在后台运行
 

复制代码 代码示例:
~ node ./app.js &
[1] 21333
[2013-06-21 09:38:30.696] [INFO] console - Start App: http://jb200.com
[2013-06-21 09:38:30.700] [INFO] console - Express server listening on port 3000

这样程序就就在后台启动了。进程正常运行着,我也不用做太多的事情。
如果我想停止这个程序,怎么办呢? 找到nodejs的系统进程,再杀死。
 

复制代码 代码示例:
~ ps -aux|grep node
root     21333  0.6  3.7 909200 38292 pts/0    Sl   09:38   0:00 node app.js
~ kill -9 21333

直接暴力解决。如果能像系统服务一样,来启动和关闭nodejs应用,多好啊!
下面就通过upstart来完成把nodejs应用封装为系统服务。

二、 把应用封装为upstart任务脚本
 

复制代码 代码示例:
~ vi /etc/init/nodejs-moive.conf
description "node.js jb200.com"
start on startup
stop on shutdown
script
    export HOME="/root/deploy/movie"
    echo $$ > /var/run/moiveme.pid
    export NODE_ENV=production
    exec /usr/bin/node /root/deploy/movie/server.js
    #日志输出
    #exec /usr/bin/node /root/deploy/movie/server.js >> /var/log/moiveme.log 2>&1
end script
pre-start script
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/moiveme.log
end script
pre-stop script
    rm /var/run/moiveme.pid
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/moiveme.log
end script

三、使用upstart管理nodejs应用
启动nodejs-moive应用(上面的任务脚本),进程ID:21257
 

复制代码 代码示例:
~ start nodejs-moive
nodejs-moive start/running, process 21257
~ tail -f /var/log/moiveme.log
[2013-06-21T09:21:17.122Z] (moive.me) Starting
~ ps aux|grep node
root     21257  8.0  3.7 909204 37824 ?        Ssl  09:21   0:00 /usr/bin/node /root/deploy/movie/server.js

查看运行状态, 进程21257正常运行
 

复制代码 代码示例:
~ status nodejs-moive
nodejs-moive start/running, process 21257

杀死nodejs应用进程21257,通过upstart管理,nodejs-moive应用会自动重启
 

复制代码 代码示例:
~ kill -9 21257
#自动重启日志
~ tail -f /var/log/moiveme.log
[2013-06-21T09:21:33.662Z] (moive.me) Starting
#查看系统进程,发现进行ID变了
~ ps -aux|grep node
root     21280  9.1  3.7 909204 37704 ?        Ssl  09:21   0:00 /usr/bin/node /root/deploy/movie/server.js
#查看进程状态,进程ID确实变了,而且是自动完成的
~ status nodejs-moive
nodejs-moive start/running, process 21280

这样很方便地通过upstart,以系统服务的方式管理nodejs应用,运维起来也简单很多。

有关node.js的介绍,参考:http://baike.baidu.com/view/3974030.htm
官网地址:http://nodejs.org/