upstart封装nodejs应用为系统服务

从零开始nodejs系列文章

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

关于作者

张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
blog: http://blog.fens.me
email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-upstart-nodejs/

upstart-nodejs

 

本文将介绍封装nodejs应用为系统服务,应用会像一个守护程序一样,被操作系统所管理。

文章目录:

  1. nodejs应用介绍
  2. upstart任务脚本
  3. nodejs应用管理

1. nodejs应用介绍

终于要把nodejs的应用程序部署上线了, node和npm在ubuntu下安装,请参考:准备Nodejs开发环境Ubuntu

把源代码通过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://moive.me
[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应用封装为系统服务。

2. upstart任务脚本

upstart的使用在 upstart把应用封装成系统服务 一文中已经介绍过了。


~ vi /etc/init/nodejs-moive.conf

description "node.js moive.me"
author "bsspirit <http://blog.fens.me>"

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

3. 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应用。运维起来会很容易!!

 

转载请注明出处:
http://blog.fens.me/linux-upstart-nodejs/

打赏作者

This entry was posted in Javascript语言实践, 操作系统

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

12 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

[…] 我在这里介绍的内容还很初级,只要会写任务脚步就可以了。 后面文章我会介绍upstart封装nodejs,mongodb,php,java等的应用的任务脚本。 […]

lingyong

博主真强大,我是个菜鸟,按着你说的方法做时,能启动任务脚本,但是,实际的node app程序却没有运行。这是怎么回事呢

Conan Zhang

你要把你的问题描述更详细一些。比如,配置文件,命令操作,日志等

lingyong

后来用了个插件,pm2来管理node app了。谢谢博主热心回复。

Conan Zhang

客气,也没帮上什么。

lingyong

博主,我现在又遇到一个问题了,我用的pm2管理,restart好多次了,这个是什么原因勒。

Conan Zhang

不好意思,我没有研究过pm2,不太清楚。不好意思!

lingyong

对了,问个题外话,就是这个disqus评论系统怎么才能避免其他网站嵌入自己的评论?貌似我再advance里设置了,没用啊

Conan Zhang

disqus应该是和你的cookie绑定的,只有你评论的网页,和你自己的能看到,其他人应该是看不到的。

sybeskki

博主这个脚本里面是否忘记加入respawn了?所有没有办法自动重启

Conan Zhang

确实没有加重启的方法。文章只是提供了一个思路,部署在生产环境时还要根据自己的业务特点,写一些自定义的配置。

补充一下,目前我是用forever进行管理。
http://blog.fens.me/nodejs-server-forever/

比起upstart直接管理node要方便一些,用upstart开机启动forever就行了。重启有forever的命令,同时配置多个app也在forever中进行。

12
0
Would love your thoughts, please comment.x
()
x