在Linux上用forever实现Node.js项目自启动


Posted in Javascript onJuly 09, 2014

那么能否利用forever加启动脚本方式解决上述问题呢?答案当然是肯定的,只不过有点麻烦,而且forever官方缺少详细的配置文档。我在配置的时候也走了一些弯路,下面详细来说。

注:本文的实验环境是Ubuntu Server 12.04 LTS x86_64,在CentOS上的配置更简单一些

最早,我想着试试在/etc/rc.local中增加一句forever start xxx看看,结果发现Ubuntu(其他系统一样)就不鸟我,主要矛盾就是mongodb使用这种方式就可以跑起来,forever就不行,无奈之下,还是从/etc/init.d的角度去考虑吧。

前提是要先把forever好,方法很简单,执行如下命令就好:

npm install forever -g

安装完成后,用一个简单的Node程序测试一下:

forever start test.js
forever stop test.js
forever restart test.js

只要不提示error,就表明forever是可以用的,也就是说用forever来后台开启一个Node项目的基本条件已经具备,剩下的就是来编写一个启动脚本了。

脚本的基本内容如下,感谢原作者的辛勤劳动:

#!/bin/bash
### BEGIN INIT INFO
# Provides:  xiyoulib
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop:  0 1 6
# Short-Description: Start daemon at boot time
# Description:  Enable service provided by daemon.
### END INIT INFO
# chkconfig: 345 88 08
# description: Forever for Node.js

DEAMON=/node.js/XiyouLibNodeExpress/bin/www  #这里需要填写你自己的Node项目的启动脚本文件
LOG=/node.js/log/log #可选,日志文件目录
PID=/node.js/pid #必填内容,用于记录forever的进程号

export PATH=$PATH:/usr/local/bin #在这里指定一下Node的可执行程序安装目录,我的是/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules #这里是Node类库的路径

#往下的内容就不用修改了

node=node
forever=forever

case "$1" in
 start)
  $forever start -l $LOG --pidFile $PID -a $DEAMON
  ;;
 stop)
  $forever stop --pidFile $PID $DEAMON
  ;;
 stopall)
  $forever stopall --pidFile $PID
  ;;
 restartall)
  $forever restartall --pidFile $PID
  ;;
 reload|restart)
  $forever restart -l $LOG --pidFile $PID -a $DEAMON
  ;;
 list)
  $forever list
  ;;
 *)
  echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
  exit 1
  ;;
esac

在这里提醒一下:最好为Node项目单独在根目录下建立一个目录,如/node.js,然后权限设为754,这样可以避免一些权限问题而造成的麻烦!

由于用的是Ubuntu Server系统,上面还配置了MongoDB的启动服务,而且在其init.d的脚本中加入了以下的语句:

# Required-Start:  $all
# Required-Stop:   $all

所以在以后自己添加的时候系统会提示错误,所以在Node项目的启动脚本里我加了前面一串的说明注释,以便Ubuntu Server系统进行设置,如果在CentOS上,应该不会出现类似的问题,这点要特别注意!

即以下的说明信息:

### BEGIN INIT INFO
# Provides:     xiyoulib
# Required-Start:  $all
# Required-Stop:   $all
# Default-Start:   2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: Start daemon at boot time
# Description:    Enable service provided by daemon.
### END INIT INFO

脚本编辑完成后使用chkconfig --list指令查看一下自己添加的服务是否生效,即3和5全部要为on才可以实现开机自启动。

如果3和5没有被置为on,那么请执行chkconfig --level 35 [你的服务名] on即可,Ubuntu Server可能会报一些warning,但是只要能将所需设置的服务的3、5变为on,其他的错误可以忽略(我感觉这是系统自己的事)。

设置完成后即可实现Node项目在Linux上的自启动,可以shutdown -r now试一下能否自启,启动好以后直接去访问一下你设定的端口号、虚拟目录神马的,如果出来想要的就大功告成了!

但是如果不对,就好好检查一些脚本,然后根据报错进行相关修改,毕竟我也是试出来的嘛!

Javascript 相关文章推荐
javascript之可拖动的iframe效果代码
Aug 01 Javascript
jquery checkbox,radio是否选中的判断代码
Mar 20 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
jQuery实战之品牌展示列表效果
Apr 10 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
Jan 02 Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 Javascript
JS实现标签页切换效果
May 04 Javascript
js实现删除json中指定的元素
Sep 22 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 #Javascript
js中将String转换为number以便比较
Jul 08 #Javascript
JS循环遍历JSON数据的方法
Jul 08 #Javascript
jquery获取选中的文本和值的方法
Jul 08 #Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 #Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 #Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 #Javascript
You might like
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
PHP实现验证码校验功能
2017/11/16 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
js 省地市级联选择
2010/02/07 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
python计数排序和基数排序算法实例
2014/04/25 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
centos7之Python3.74安装教程
2019/08/15 Python
python异步Web框架sanic的实现
2020/04/27 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
开工仪式策划方案
2014/05/23 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
股东大会通知
2015/04/24 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server