使用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的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 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的ASP防火墙
2006/10/09 PHP
php 进度条实现代码
2009/03/10 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
Laravel日志用法详解
2016/10/09 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
浅析js封装和作用域
2013/07/09 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python sorted对list和dict排序
2020/06/09 Python
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
了解AppleTalk协议吗
2014/04/01 面试题
跟单文员的岗位职责
2013/11/14 职场文书
写自荐信三大法宝
2014/01/24 职场文书
家长对学生的评语
2014/04/18 职场文书
体育教师求职信
2014/06/30 职场文书
高老头读书笔记
2015/06/30 职场文书
2016国培学习心得体会
2016/01/08 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL