【问题标题】:Running node.js forever as daemon永远运行 node.js 作为守护进程
【发布时间】:2013-05-11 20:40:39
【问题描述】:

我永远配置为在启动时运行我的 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

【问题讨论】:

  • 永远是用户特定的。您的启动脚本是否可能在与您登录时不同的用户下运行?
  • 是的,我如何检查谁永远在跑步
  • ps -aux | grep forever 第一列是用户。

标签: linux node.js centos forever


【解决方案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 永远!

【讨论】:

  • 我想这被否决了,因为它没有回答如何永远守护 js 的问题,但老实说,这是最好的解决方案。
  • “pm2 是新国王!永远死了,相信我”也许你应该解释一下原因。 “通常,您的应用程序在一个内核上运行。现在不行了!我们在谈论速度!”如果这就是你的理由,那么这不是一个令人信服的论点。大多数 Node.js 应用程序按原样饱和多个 CPU 内核没有问题。
  • 我需要有效地传递一个参数,如 node ./cli.js start 是原始作者创建我的设置的方式。我将如何使用 pm2 做到这一点?
【解决方案2】:

您也可以使用 @reboot 参数将其永久放入用户的 crontab 中,以便在启动时启动。

类似:

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

(假设永远在/usr/bin/;它也可能在/usr/local/bin/ 之类的地方。)

【讨论】:

    【解决方案3】:

    问题是它的所有文件都永远保存在 ~/.forever 中。上面的脚本以 root 身份运行。不确定它将它们存储在哪里,但对我来说,做“sudo forever list”就可以了。

    【讨论】:

      【解决方案4】:

      只需简单地使用start 命令 forever start /path/to/script.js

      【讨论】:

        【解决方案5】:

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

        https://www.npmjs.com/package/forever-service

        【讨论】:

          猜你喜欢
          • 2023-03-02
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 2011-08-25
          • 1970-01-01
          • 2011-07-21
          • 2015-04-16
          相关资源
          最近更新 更多