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
プロセスは再起動できます…奇妙です。
これをバイパスする方法を次に示します。
グループを作成するだけです
新しいグループを作成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'
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
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
を実行することもできます。
同様の問題に直面しました。その理由は、必要な権限がないか、pm2で作成されたpidおよびsockファイルを所有していない可能性があります。私の場合、pm2を起動する代わりにコマンドラインから起動したときは正常に機能していました。スタートアップを使用したとき、デフォルトではrootユーザーとして実行されていました。 rootはpid、sockファイルの所有者でした
私はパーティーに遅れていることを知っていますが、これは私がやった方法です:
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;