如何运行pm2以便其他服务器用户能够访问该进程?

当我用pm2启动我的Nodejs应用程序时,其他服务器用户无法访问该进程。

即使我从一个自定义目录启动pm2(不是当前用户的~/ ,pm2默认使用的是什么):

 HOME=/var/www pm2 start app.js 

任何用户都可以访问目录 (与~/比较),但其他服务器用户仍然无法访问该进程。

当其他服务器用户做pm2 list ,显示他有0个进程正在运行 – 但有(由另一个用户启动)。 而当其他用户尝试HOME=/var/www pm2 list ,CLI会抛出一个错误:

 events.js:72 throw er; // Unhandled 'error' event ^ Error: connect EACCES at errnoException (net.js:905:11) at Object.afterConnect [as oncomplete] (net.js:896:19) 

所以我想知道如何确保用户能够访问其他服务器用户运行的pm2进程? 还是应该有不同的接近?


我想知道为什么每个服务器用户能够使git pull从Git存储库部署最新的源代码,但不能重新启动pm2过程之后? 只有启动pm2进程的用户才能重新启动它…奇怪。

以下是我们如何绕过这一点。

只需创build一个组

  • 创build一个新的小组pm2或任何名称为你工作

    $ groupadd pm2

  • /var/www/文件夹组所有者更改为pm2

    $ chgrp -R pm2 /var/www

  • 添加其他用户,让我们说bob,到pm2

    $ usermod -aG pm2 bob

现在bob可以通过将$ HOME更改为/ var / www来运行pm2命令

$ env HOME=/var/www pm2 list

或者(更好的是)像@jcollumbuild议的那样创build一个别名

$ alias pm2='env HOME=/var/www pm2'

看来PM2在用户的'〜/ .pm2'文件夹下保存了数据,所以其他用户不能用'pm2 status'来查看你的PM2进程。

我为PM2创build了一个新的linux用户,所有用户在启动Pm2进程之前使用'su pm2user':

 $ sudo su pm2user $ sudo pm2 start app.js 

这是一个愚蠢的方式,但它很简单,运作良好。 希望这会帮助:)

好的,这里是我的解决scheme相同的问题:

  1. 创buildPM2主目录: sudo mkdir /opt/pm2
  2. 创build用户pm2sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  3. 将所有需要的用户添加到sudo usermod -aG <username>组: sudo usermod -aG <username>
  4. 设置/ opt / pm2的所有者: sudo chown pm2:pm2 /opt/pm2
  5. 更改权限: sudo chmod 770 /opt/pm2
  6. 设置环境variables(我正在使用/ etc / environment ): PM2_HOME=/opt/pm2
  7. 安装pm2: sudo npm install pm2 -g 。 我的npm前缀被设置为/ usr / local
  8. 运行sudo pm2 startup 。 它会为你的系统生成启动脚本(在我的情况下是Ubuntu服务器)。
  9. 打开启动脚本(在我的情况下是/etc/init.d/pm2-init.sh )并编辑下列variablesUSER=pm2 ... export PM2_HOME="/opt/pm2"

在我的树莓派我得到了套接字文件权限inheritance的问题,他们被设置为只读组而不是rwx应用于家庭目录: srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

经过几个小时的search,我终于find了解决办法:我添加了以下行到启动脚本: umask 0002并得到它: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

就这样。

假设你运行pm2作为www-data 。 要访问pm2实例,我需要: sudo -u www-data HOME=/var/www pm2 list 。 当然,你可以创build一个脚本(例如supm2 )来为你做,所以你可以做supm2 list

我遇到了类似的问题。 原因可能是您没有所需的权限,或者您没有拥有由pm2创build的pid和sock文件。 就我而言,当我从命令行启动pm2而不是启动时,它工作正常。 当我使用启动时,它默认以root用户身份运行。 所以root是pid,sock文件的所有者