使用upstart把nodejs应用封装为系统服务实例


Posted in NodeJs onJune 01, 2014

一、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://3water.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 3water.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应用。运维起来会很容易!!
NodeJs 相关文章推荐
nodejs文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 #NodeJs
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 #NodeJs
Nodejs进程管理模块forever详解
Jun 01 #NodeJs
NodeJS Express框架中处理404页面一个方式
May 28 #NodeJs
跟我学Nodejs(三)--- Node.js模块
May 25 #NodeJs
跟我学Nodejs(二)--- Node.js事件模块
May 21 #NodeJs
跟我学Nodejs(一)--- Node.js简介及安装开发环境
May 20 #NodeJs
You might like
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
从vue源码看props的用法
2019/01/09 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
美的官方商城:Midea
2016/09/14 全球购物
会议接待欢迎词
2014/01/12 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript