使用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中的非阻塞方法介绍
Jun 05 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 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下使用以下代码连接并测试
2008/04/09 PHP
php二维数组转成字符串示例
2014/02/17 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php中使用url传递数组的方法
2015/02/11 PHP
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python操作SQLite简明教程
2014/07/10 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python环境变量设置方法
2016/08/28 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
Python3.9新特性详解
2020/10/10 Python
植物选择:Botanic Choice
2017/02/15 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
银行实习的自我鉴定
2013/12/10 职场文书
工地门卫岗位职责
2013/12/30 职场文书
司法局火灾防控方案
2014/06/05 职场文书
诚实守信演讲稿
2014/09/01 职场文书
售后客服个人自我评价
2014/09/14 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
倡议书格式及范文
2015/04/29 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL