使用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 URL模块操作URL相关方法介绍
Mar 03 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
配置nodejs环境的方法
May 13 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 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
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
mysql数据库差异比较的PHP代码
2012/02/05 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php返回json数据函数实例
2014/10/09 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
Python查询IP地址归属完整代码
2017/06/21 Python
python实现微信自动回复功能
2018/04/11 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
采购部经理岗位职责
2014/02/10 职场文书
房屋继承公证书
2014/04/10 职场文书
西安大雁塔导游词
2015/02/10 职场文书
教师年度个人总结
2015/02/11 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
离婚案件原告代理词
2015/05/23 职场文书
教师继续教育反思周记
2015/06/25 职场文书
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers