zoukankan      html  css  js  c++  java
  • node 后台管理插件forever

    在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台运行,虽然不能直接用node命令搞定,但是在安装了forever这个包以后,还是很轻松的。不过要是在远程服务器上构建Node项目,如果没法自启动,一旦服务器重启,那就麻烦了。
     
     

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

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

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

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

    1
    npm install forever -g

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

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/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的脚本中加入了以下的语句:

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

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

    即以下的说明信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ### 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试一下能否自启,启动好以后直接去访问一下你设定的端口号、虚拟目录神马的,如果出来想要的就大功告成了!

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

  • 相关阅读:
    设计模式--4建造者模式
    java中的方法重载与重写以及方法修饰符
    设计模式--3.模板方法模式
    设计模式--2.工厂方法模式
    设计模式--1.单例模式
    问题--时景某些用户不能发表评论解决方案
    EXCEL:从一组数据中查找我想要的某个数据是否存在
    Git版本控制--05--可以吃后悔药之版本回退
    Git版本控制--04--文件修改后怎么提交
    Git版本控制--03--怎么向Git仓库中添加文件
  • 原文地址:https://www.cnblogs.com/neights/p/4312000.html
Copyright © 2011-2022 走看看