zoukankan      html  css  js  c++  java
  • 利用forever在Linux上实现Node.js项目自启动

    在一台计算机上手动跑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,运行例如以下命令就好:

    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试一下是否能自启,启动好以后直接去訪问一下你设定的port号、虚拟文件夹神马的,假设出来想要的就大功告成了。

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


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

  • 相关阅读:
    [学习笔记] 网络最大流的HLPP算法
    [学习笔记] LCT 初步
    js中函数的原型及继承
    关于js中函数的一点总结
    关于css实现水平及垂直居中的方法记录
    js基础总结03 --操作数组
    近期学习es6后对变量提升及let和const的一点思考
    用css和js实现侧边菜单栏点击和鼠标滑动特效
    用css或js实现文本输入框的特效
    Jmeter怎样打印日志
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6790537.html
Copyright © 2011-2022 走看看