使用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 sublime text 3安装与配置
Jun 19 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
详解nodejs 文本操作模块-fs模块(一)
Dec 22 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
深入理解nodejs中Express的中间件
May 19 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php模板原理讲解
2013/11/13 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
js闭包实例汇总
2014/11/09 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
由浅入深讲解python中的yield与generator
2017/04/05 Python
python3 shelve模块的详解
2017/07/08 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
python单例模式实例解析
2018/08/28 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python实现猜拳小游戏
2020/04/05 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
复兴之路展览观后感
2015/06/02 职场文书
法制主题班会教案
2015/08/13 职场文书
大学生活委员竞选稿
2015/11/21 职场文书