使用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教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
nodejs导出excel的方法
Jun 30 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 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 array 的加法操作代码
2010/07/24 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
JS 控件事件小结
2012/10/31 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
javascript求日期差的方法
2016/03/02 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
python中requests小技巧
2017/05/10 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
金讯Java笔试题目
2013/06/18 面试题
药物学专业学生的自我评价
2013/10/27 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
小学教育见习总结
2015/06/23 职场文书
辩论赛新闻稿
2015/07/17 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python