永远将node.js作为守护进程运行

时间:2013-05-16 19:47:15

标签: linux node.js centos forever

我永远配置为在启动时运行我的node.js服务器。使用这个scipt。它工作正常。并永远保持服务器运行。但是,当我永远运行列表时,我在这里看不到我的服务器!我知道它正在运行,但它从未在此列表中。看起来系统正在运行两个永远的实例。

root@ddd [/etc/init.d]# chkconfig  --list |grep node1
node1 0:off   1:off   2:on    3:on    4:on    5:on    6:off

这是脚本:/etc/init.d/node1

NAME=node1
NODE_BIN_DIR=/usr/local/bin
NODE_PATH=/usr/local/lib/node_modules
APPLICATION_DIRECTORY=/home/user1/www
APPLICATION_START=node1.js
PIDFILE=/var/run/node1.pid
LOGFILE=/var/log/node1.log

PATH=$NODE_BIN_DIR:$PATH
export NODE_PATH=$NODE_PATH

start() {
    echo "Starting $NAME"
    forever --pidFile $PIDFILE --sourceDir $APPLICATION_DIRECTORY \
        -a -l $LOGFILE --minUptime 5000 --spinSleepTime 2000 \
        start $APPLICATION_START &
    RETVAL=$?
}

stop() {
    if [ -f $PIDFILE ]; then
        echo "Shutting down $NAME"
        forever stop $APPLICATION_START
        rm -f $PIDFILE
        RETVAL=$?
    else
        echo "$NAME is not running."
        RETVAL=0
    fi
}

restart() {
    echo "Restarting $NAME"
    stop
    start
}

status() {
    echo "Status for $NAME:"
    forever list
    RETVAL=$?
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage: {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $RETVAL

5 个答案:

答案 0 :(得分:2)

您也可以使用@reboot参数永久地放在用户的crontab中,这样它就会在启动时启动。

类似的东西:

@reboot /usr/bin/forever start /path/to/script.js

(这假设永远在/usr/bin/;它也可能在某个地方/usr/local/bin/。)

答案 1 :(得分:1)

我不会浪费时间去试图永远守护。

pm2是新王!永远死了,相信我

以下是如何将pm2作为systemd或OS等效服务运行:

npm install -g pm2

pm2 startup

现在你可以这样做:

service pm2 status|start|stop|restart

也:

pm2 save

将拍摄正在运行的pm2应用程序的快照,并在重新启动时重新启动它们(不需要crontab条目)

完成!

pm2比永远好多了。它与永远完全相同,但更多!

pm2 list # equivalent to forever list

pm2 start app.js --name "wotever" # equivalent to forever start

pm2 start app.js -i 0 --name "wotever" # load balance your app on all available cores 

你看到最后一个命令吗?你明白这意味着什么吗?我很敬畏!

通常,您的应用在一个核心上运行。不再!我们正在谈论速度!

PM2 FOREVER!

答案 2 :(得分:0)

问题是永远将所有文件保存在〜/ .forever中。以上脚本以root身份运行。不知道它在哪里存储它们,但对我来说" sudo永远列出"做到了。

答案 3 :(得分:0)

只需使用start命令即可         forever start /path/to/script.js

答案 4 :(得分:0)

我喜欢使用forever-service来守护node.js进程,它将通过在引导和日志文件重定向上启动它们来处理所有事情。

请参见this guide