web-dev-qa-db-ja.com

他のサーバーユーザーがプロセスにアクセスできるように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プロセスは再起動できます…奇妙です。

24
Nik Sumeiko

これをバイパスする方法を次に示します。

グループを作成するだけです

  • 新しいグループを作成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'

11
vinayp

OK、同じ問題に対する私の解決策は次のとおりです:

# 1. Create user PM2 and set his password
Sudo useradd -d /opt/pm2 -m -s /bin/bash pm2
Sudo passwd pm2

# 2. Add users you want to provide the access to PM2 to PM2 group
Sudo usermod -aG pm2 <username>

# Note: if you added yourself to pm2 group, perform logout and login back to the Host machine   

# 3. Set the PM2_HOME variable
Sudo touch /etc/profile.d/pm2.sh
Sudo sh -c 'echo "export PM2_HOME=\"/opt/pm2/.pm2\"" > /etc/profile.d/pm2.sh'
source /etc/profile.d/pm2.sh

# 4. Install the PM2 
# Check the npm prefix if fail: 
# https://docs.npmjs.com/misc/config#prefix
Sudo npm install pm2 -g

# 5. Make startup script
Sudo pm2 startup ubuntu -u pm2 --hp /opt/pm2

Sudo systemctl enable pm2-pm2 && \
Sudo systemctl start pm2-pm2 && \
Sudo systemctl status pm2-pm2

# 6. Change permission of PM2_HOME
Sudo chmod -v g+w /opt/pm2/.pm2

# 7. Check the PM2
pm2 status
7
Ilja Denisovs

PM2はユーザーの「〜/ .pm2」フォルダーの下にデータを保存するため、他のユーザーは「pm2ステータス」のPM2プロセスを見ることができません。

PM2用の新しいLinuxユーザーを作成し、すべてのユーザーはPm2プロセスを開始する前に「su pm2user」を使用します。

$ Sudo su pm2user
$ Sudo pm2 start app.js

それは愚かな方法ですが、シンプルでうまく機能します。これが役立つことを願っています:)

4
Allen Kung

Pm2をwww-dataとして実行すると仮定します。そのpm2インスタンスにアクセスするには、Sudo -u www-data HOME=/var/www pm2 listのようにします。もちろん、それを行うスクリプト(たとえばsupm2)を作成して、代わりにsupm2 listを実行することもできます。

1
Diego Luces

同様の問題に直面しました。その理由は、必要な権限がないか、pm2で作成されたpidおよびsockファイルを所有していない可能性があります。私の場合、pm2を起動する代わりにコマンドラインから起動したときは正常に機能していました。スタートアップを使用したとき、デフォルトではrootユーザーとして実行されていました。 rootはpid、sockファイルの所有者でした

0
Shrinath Shenoy

私はパーティーに遅れていることを知っていますが、これは私がやった方法です:

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など

export PM2_HOME=$PM2;
0
crankshaft