使用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 相关文章推荐
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
Feb 07 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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多例模式介绍
2013/06/24 PHP
php简单中奖算法(实例)
2017/08/15 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
如何真正的了解python装饰器
2020/08/14 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
如何让Java程序执行效率更高
2014/06/25 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
30年同学聚会感言
2014/01/30 职场文书
内勤主管岗位职责
2014/04/03 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
简易版租房协议书范本
2014/10/13 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS