Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何运行pm2以便其他服务器用户能够访问该进程?_Node.js_Server_Pm2_Multiple Users - Fatal编程技术网

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

Node.js 如何运行pm2以便其他服务器用户能够访问该进程?,node.js,server,pm2,multiple-users,Node.js,Server,Pm2,Multiple Users,当我用启动我的Nodejs应用程序时,其他服务器用户无法访问该进程。 即使我从自定义目录启动pm2(不是当前用户的~/,pm2默认使用的目录): 任何用户都可以访问目录(与~/相比),但其他服务器用户仍然无法访问该进程 当其他服务器用户执行pm2 list时,它会显示他正在运行0个进程–但有(由其他用户启动)。当其他用户尝试HOME=/var/www-pm2 list时,CLI会抛出一个错误: events.js:72 throw er; // Unhandled 'error' eve

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

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

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

当其他服务器用户执行
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进程的用户才能重新启动它……这很奇怪。

我也遇到过类似的问题。原因可能是您没有required权限,或者您不拥有由pm2创建的pid和sock文件。在我的情况下,当我从命令行而不是从startup启动pm2时,它工作正常。当我使用startup时,默认情况下它以root用户身份运行。因此root是pid、sock文件的所有者。下面是我们如何绕过它的

只需创建一个组

  • 创建一个新组
    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

或者(更好的是)按照@jcollum的建议创建一个别名


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

pm2似乎将数据保存在用户的“~/.pm2”文件夹下,因此其他用户无法看到您的pm2流程的“pm2状态”

我为PM2创建了一个新的linux用户,所有用户在启动PM2进程之前都使用“su pm2user”:

$ sudo su pm2user
$ sudo pm2 start app.js

这是一种愚蠢的方法,但它很简单,效果也很好。希望这能有所帮助:)

假设您将pm2作为
www-data
运行。要访问该pm2实例,我需要:
sudo-u www-data-HOME=/var/www-pm2-list
。当然,您可以创建一个脚本(例如,
supm2
)为您执行此操作,这样您就可以只执行
supm2 list

好的,下面是我针对相同问题的解决方案:

#1。创建用户PM2并设置其密码
sudo useradd-d/opt/pm2-m-s/bin/bash-pm2
sudo passwd pm2
# 2. 将要提供PM2访问权限的用户添加到PM2组
sudo usermod-aG pm2
#注意:如果您将自己添加到pm2组,请执行注销并重新登录到主机
# 3. 设置PM2_HOME变量
sudo touch/etc/profile.d/pm2.sh
sudo sh-c'echo“export PM2\u HOME=\”/opt/PM2/.PM2\”>/etc/profile.d/PM2.sh”
来源/etc/profile.d/pm2.sh
# 4. 安装PM2
#如果失败,请检查npm前缀:
# https://docs.npmjs.com/misc/config#prefix
sudo npm安装pm2-g
# 5. 生成启动脚本
sudo pm2启动ubuntu-u pm2--hp/opt/pm2
sudo systemctl启用pm2-pm2和\
sudo系统控制启动pm2-pm2和\
sudo systemctl状态pm2-pm2
# 6. 更改PM2_HOME的许可
sudo chmod-v g+w/opt/pm2/.pm2
# 7. 检查PM2
pm2状态

我知道我来晚了,但我就是这样做的:

PM2="/usr/share/nodejs/pm2"
USER="me"
useradd $USER
groupadd pm2
chgrp -R pm2 $PM2
usermod -aG pm2 $USER
setfacl -Rdm g:pm2:rwx $PM2
/etc/bash.bashrc etc

export PM2_HOME=$PM2;

一个pm2实例只属于启动它的用户。@Nik Sumeiko,根据描述,你不应该在这篇文章中添加永久标记。Shrinath,从启动开始启动pm2是什么意思?服务器的启动?我总是从CLI启动pm2,但不是作为根用户启动。然而,作为一个用户在sudoers组中。也许有一种方法可以更改pid、sock文件权限?所以其他用户(sudoers,如果有关系的话)有权查看已启动的pm2进程?我的意思是,运行时向其抛出错误消息的用户没有访问pm2 pid文件的权限。pm2是由不同的用户启动的这对我来说很有效。另一件事是将PM2别名为
env HOME
,以便在所有PM2呼叫中都包含该名称。很抱歉noob的问题。在上面的解决方案中-如果用户“bob”使用pm2运行某些东西(例如“pm2列表”),它将更改其主变量。仅适用于此命令,否则它将是永久性的(在这种情况下,这不是一个好的解决方案,因为许多应用程序要求使用此主变量)。我遇到了确切的问题,但我来自Windows server,有人能告诉我如何在Windows环境中做同样的事情吗?@JanezKranjski Linux中的每个应用程序都是以用户身份运行的,并且在一个环境中运行。您需要为运行应用程序的用户设置环境。希望这有意义。@JanezKranjski注意命令的运行方式:“env HOME=/var/www pm2 list”都在一行中。在运行命令之前,在同一行上指定一个env变量,将在本地为该命令设置该env变量。因此,当执行此操作时,$HOME将返回其原始值。事实上,从技术上讲,该值从未更改。
PM2\u HOME
变量是否需要在安装前设置?我已经安装了pm2,希望避免重新安装…马克,你可以随时设置。它只是指向PM2的主目录。我发现的唯一问题是,每次PM2服务重新启动时,它都会重写非常重要的pub.sock和rpc.sock文件,您将失去设置的770访问权限。每次重启都需要对这些文件进行chmoded。这是我的最佳解决方案@Nicholi Umask解决方案对你没有帮助?你有没有和sudo一起做过PM2操作?在wh之下
export PM2_HOME=$PM2;