如何使用 pm2 托管 node.js 应用程序而不以 root 身份运行它们?

如何使用 pm2 托管 node.js 应用程序而不以 root 身份运行它们?

我已经设置 pm2 来运行 node.js 应用程序,并且我可以成功启动它,并且它将在重启后重新启动。

但是,pm2 守护进程以 root 身份运行,这让我认为我的所有节点脚本也以 root 身份运行?即使我将它们添加为系统中的普通用户。日志文件和其他内容是在用户主目录中创建的,/~/.pm2/logs但日志归 root 所有。

当我调用pm2 startup(处理 init.d 脚本等的安装)时,它会创建/etc/init.d/pm2-init.sh如下所示的内容:

#!/bin/bash
# chkconfig: 2345 98 02
#
# description: PM2 next gen process manager for Node.js
# processname: pm2
#
### BEGIN INIT INFO
# Provides:          pm2
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: PM2 init script
# Description: PM2 is the next gen process manager for Node.js
### END INIT INFO

NAME=pm2
PM2=/usr/local/lib/node_modules/pm2/bin/pm2
NODE=/usr/local/bin/node

export HOME="/root"

start() {
    echo "Starting $NAME"
    $NODE $PM2 stopAll
    $NODE $PM2 resurrect
}

stop() {
    $NODE $PM2 dump
    $NODE $PM2 stopAll
}

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

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

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

当我转储进程(这是恢复进程时将使用的内容)时,我看到了用户的提及"USER":"pi",但我不认为它实际上以用户 pi 的身份运行。

有什么想法吗?

答案1

最新的pm2-初始化pm2 项目 repo 中就有这个功能。

相关内容