这篇文章主要介绍了使用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://lovean.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 lovean.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应用。运维起来会很容易!!

最新资讯
杨振宁:未来科学大奖要设永久基金是极有远见的

杨振宁:未来科学大奖要

杨振宁表示,19世纪的末年,在瑞典设立了诺贝尔奖,这是非常
王贻芳:捐出未来科学大奖奖金建立大型对撞机基金

王贻芳:捐出未来科学大

2019未来科学大奖颁奖典礼今日在北京中国大饭店举行。
张磊:我们要在年轻人心中撒下“异想天开”的种子

张磊:我们要在年轻人心

11月17日下午消息,在2019未来科学大奖颁奖礼现场,未来
马云举办非洲版“赢在中国”:50多国家1万企业家报名

马云举办非洲版“赢在

当地时间11月16日晚间,马云非洲创业者大赛在加纳举办决
YC中国路演日陆奇再谈创业:需要更为技术驱动的生态

YC中国路演日陆奇再谈

YC中国今日举办首届路演日,其创始人兼CEO陆奇做开场演
比尔·盖茨超越贝佐斯 时隔两年重新登顶世界首富

比尔·盖茨超越贝佐斯

外媒近日报道称,美国微软公司人比尔·盖茨目前净资产达
最新文章
微信小程序调用天气接口并且渲染在页面过程详解

微信小程序调用天气接

这篇文章主要介绍了微信小程序调用天气接口并且渲染在
Electron + vue 打包桌面操作流程详解

Electron + vue 打包

这篇文章主要介绍了Electron + vue 打包桌面操作流程,
前端Vue项目详解--初始化及导航栏

前端Vue项目详解--初

这篇文章主要介绍了前端Vue项目详解--初始化及导航栏,
ES6 Object方法扩展的应用实例分析

ES6 Object方法扩展的

这篇文章主要介绍了ES6 Object方法扩展的应用,结合实
JS实现给数组对象排序的方法分析

JS实现给数组对象排序

这篇文章主要介绍了JS实现给数组对象排序的方法,结合
基于vue+axios+lrz.js微信端图片压缩上传方法

基于vue+axios+lrz.js

这篇文章主要介绍了基于vue+axios+lrz.js微信端图片压