在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台执行,尽管不能直接用node命令搞定,可是在安装了forever这个包以后。还是非常轻松的。只是要是在远程server上构建Node项目。假设没法自启动。一旦server重新启动,那么项目必须通过管理员远程手动开启才干够执行。

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

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

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

首先感谢这篇文章和它的作者,http://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3,真是为数不多的珍贵资料!

前提是要先把forever好。方法非常easy,运行例如以下命令就好:

  1. npm install forever -g

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

  1. forever start test.js
  2. forever stop test.js
  3. forever restart test.js

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

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

  1. #!/bin/bash
  2. ### BEGIN INIT INFO
  3. # Provides:          xiyoulib
  4. # Required-Start:    $all
  5. # Required-Stop:     $all
  6. # Default-Start:     2 3 4 5
  7. # Default-Stop:      0 1 6
  8. # Short-Description: Start daemon at boot time
  9. # Description:       Enable service provided by daemon.
  10. ### END INIT INFO
  11. # chkconfig: 345 88 08
  12. # description: Forever for Node.js
  13.  
  14. DEAMON=/node.js/XiyouLibNodeExpress/bin/www #这里须要填写你自己的Node项目的启动脚本文件
  15. LOG=/node.js/log/log #可选。日志文件文件夹
  16. PID=/node.js/pid #必填内容。用于记录forever的进程号
  17.  
  18. export PATH=$PATH:/usr/local/bin #在这里指定一下Node的可运行程序安装文件夹,我的是/usr/local/bin
  19. export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules #这里是Node类库的路径
  20.  
  21. #往下的内容就不用改动了
  22.  
  23. node=node
  24. forever=forever
  25.  
  26. case "$1" in
  27. start)
  28. $forever start -l $LOG --pidFile $PID -a $DEAMON
  29. ;;
  30. stop)
  31. $forever stop --pidFile $PID $DEAMON
  32. ;;
  33. stopall)
  34. $forever stopall --pidFile $PID
  35. ;;
  36. restartall)
  37. $forever restartall --pidFile $PID
  38. ;;
  39. reload|restart)
  40. $forever restart -l $LOG --pidFile $PID -a $DEAMON
  41. ;;
  42. list)
  43. $forever list
  44. ;;
  45. *)
  46. echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
  47. exit 1
  48. ;;
  49. esac

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

因为用的是Ubuntu Server系统。上面还配置了MongoDB的启动服务,并且在其init.d的脚本中增加了下面的语句:

  1. # Required-Start: $all
  2. # Required-Stop: $all

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

即下面的说明信息:

  1. ### BEGIN INIT INFO
  2. # Provides:          xiyoulib
  3. # Required-Start:    $all
  4. # Required-Stop:     $all
  5. # Default-Start:     2 3 4 5
  6. # Default-Stop:      0 1 6
  7. # Short-Description: Start daemon at boot time
  8. # Description:       Enable service provided by daemon.
  9. ### 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试一下是否能自启,启动好以后直接去訪问一下你设定的port号、虚拟文件夹神马的,假设出来想要的就大功告成了。

可是假设不正确,就好好检查一些脚本。然后依据报错进行相关改动,毕竟我也是试出来的嘛。

原文地址:http://blog.csdn.net/yuanguozhengjust/article/details/37512993,转载请注明出处!

利用forever在Linux上实现Node.js项目自启动的更多相关文章

  1. Linux 上安装 Node.js

    Linux 上安装 Node.js 直接使用已编译好的包(在个人阿里云服务器47.100.6.106上安装) Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使 ...

  2. 如何线上部署node.js项目

    来源:http://blog.csdn.net/chenlinIT/article/details/73343793 前言 最近工作不是很忙,在空闲时间学习用node+express搭建自己的个人博客 ...

  3. 最简单的方式在linux上升级node.js版本

    node的升级频率太高,n模块来升级是最方便的,网上看了很多资料介绍使用n模块,但是安装n模块之后却经常找不到这个命令  很多同学安装之后直接去使用n会发现命令不存在,就停留在这一步无法前进了. 解决 ...

  4. CentOS上安装Node.js

    CentOS上安装Node.js [日期:2014-07-21] 来源:Linux社区  作者:maskdfe [字体:大 中 小]     CentOS上安装Node.js(想在Linux上学习No ...

  5. 【Linux】安装 node.js

    1.在 linux 上安装 node.js 有几种方式,这里 教的是最简单的一种,因为其他都比较坑. 2.先去 node.js 官网 获取到已经编译好的安装包的地址, 3.使用 wget 去下载上面获 ...

  6. [Node.js] Node.js项目的持续集成

    原文地址:http://www.moye.me/2016/03/03/nodejs_ci_by_jenkins 引子 持续集成 (Continuous Integration,简称CI)是一种软件工程 ...

  7. 在 Ubuntu 14.04/15.04 上配置 Node JS v4.0.0

    大家好,Node.JS 4.0 发布了,这个流行的服务器端 JS 平台合并了 Node.js 和 io.js 的代码,4.0 版就是这两个项目结合的产物——现在合并为一个代码库.这次最主要的变化是 N ...

  8. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

  9. 在Visual Studio上开发Node.js程序

    [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...

随机推荐

  1. Mac-item+zsh

    $brew cask install iterm2 $ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/m ...

  2. mysql分页查询语法

    一.limit语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指 ...

  3. springmvc对于前台date类型注意点

    springmvc,可以自动将数据注入到: “name”值相同,便注入,比如String Integer 还有我们自定义的bean,比如User. 但是date类型的数据,如果前台传的是用" ...

  4. Log4Net的WinForm使用

    一.Log4Net的WinForm使用 1.首先使用nuget 添加log4Net 到WinForm项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L - %m%n log4j.pr ...

  5. redis SCAN cursor

    https://redis.io/commands/scan 可以看到: sscan的返回结果,有两部分, 第一部分  是一个数字.其实代表一个游标. 第二部分  是结果. scan是以游标为基础,每 ...

  6. Servlet response原理

    首先web服务器 接受到http请求后转交给相应的servlet进行处理这个过程可以他通过配置web.xml来进行确定,然后web服务器将相应的信息封装到request和response对象,由相应的 ...

  7. Python 解释器中方向键无法使用的解决方法

    如下: SyntaxError: invalid syntax >>> ^[[A File "<stdin>", line 1 ^ SyntaxErr ...

  8. 7/26 CSU-ACM2018暑期训练3-递归&递推-选讲

    题目链接 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= ...

  9. Validate on POST data

    1. Basic validate  on bean's attribute. @Notnull @Max @Min @Pattern ... 2. Validate by logic 1) pass ...

  10. 模板—数据结构—LCT

    模板—数据结构—LCT Code: #include <cstdio> #include <algorithm> using namespace std; #define N ...