node.js - snippet - title tag wordpress




Wie pm2 auszuführen, damit andere Serverbenutzer auf den Prozess zugreifen können? (4)

Wenn ich meine Nodejs-App mit pm2 starte , können andere Serverbenutzer nicht auf den Prozess zugreifen.

Selbst wenn ich pm2 aus einem benutzerdefinierten Verzeichnis starte (nicht das aktuelle ~/ , was PM2 standardmäßig verwendet):

HOME=/var/www pm2 start app.js

Das Verzeichnis ist für jeden Benutzer zugänglich (im Vergleich zu ~/ , aber es gibt immer noch keine Möglichkeit für andere Serverbenutzer, auf den Prozess zuzugreifen.

Wenn ein anderer Serverbenutzer pm2 list , zeigt er ihm an, dass 0 Prozesse laufen - aber es gibt (von einem anderen Benutzer gestartet). Und wenn ein anderer Benutzer HOME=/var/www pm2 list versucht, gibt CLI einen Fehler aus:

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)

Ich frage mich also, wie man sicherstellen kann, dass Benutzer auf PM2-Prozesse zugreifen können, die von anderen Serverbenutzern ausgeführt werden. Oder soll es anders angegangen werden?

Ich frage mich, warum jeder Server-Benutzer in der Lage ist, git pull zur Bereitstellung des neuesten Quellcodes aus einem Git-Repository zu machen, aber danach den pm2 Prozess nicht neu pm2 kann? Nur der Benutzer, der den pm2 Prozess gestartet pm2 , kann ihn neu starten ... pm2 .


Es scheint, dass PM2 Daten im Ordner "~ / .pm2" des Benutzers speichert, sodass andere Benutzer Ihren PM2-Prozess nicht mit dem Status "pm2" sehen können.

Ich habe einen neuen Linux-Benutzer für PM2 erstellt, und alle Benutzer verwenden 'su pm2user', bevor sie den Pm2-Prozess starten:

$ sudo su pm2user
$ sudo pm2 start app.js

Es ist ein dummer Weg, aber es ist einfach und funktioniert gut. Hoffe das würde helfen :)


Ich habe ein ähnliches Problem gesehen. Der Grund kann sein, dass Sie nicht über die erforderlichen Berechtigungen verfügen oder die von pm2 erstellten PID- und Sock-Dateien nicht besitzen. In meinem Fall funktionierte es gut, als ich pm2 von der Kommandozeile statt vom Start gestartet habe. Wenn ich den Startvorgang ausführte, wurde er standardmäßig als root-Benutzer ausgeführt. So Root war der Besitzer der Pid, ​​Socken-Dateien


Angenommen, Sie starten pm2 als www-data . Um Zugriff auf diese PM2-Instanz zu haben, tue ich: sudo -u www-data HOME=/var/www pm2 list zum Beispiel. Sie können natürlich ein Skript (zB supm2 ) supm2 , das das für Sie erledigt, so dass Sie stattdessen einfach eine supm2 list .


Ok, hier ist meine Lösung für dasselbe Problem:

  1. Erstellen Sie ein PM2-Home-Verzeichnis: sudo mkdir /opt/pm2
  2. Erstelle Benutzer pm2 : sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  3. Fügen Sie der Gruppe sudo usermod -aG <username> alle erforderlichen Benutzer hinzu : sudo usermod -aG <username>
  4. Setzen Sie den Besitzer von / opt / pm2 : sudo chown pm2:pm2 /opt/pm2
  5. Berechtigungen ändern: sudo chmod 770 /opt/pm2
  6. Setze Umgebungsvariable (Ich benutze / etc / environment ): PM2_HOME=/opt/pm2
  7. Installieren Sie pm2: sudo npm install pm2 -g . Mine NPM Prefix ist auf / usr / local gesetzt .
  8. Führen Sie sudo pm2 startup . Es wird ein Startskript für Ihr System generieren (in meinem Fall ist es Ubuntu Server).
  9. Öffne das Startskript (in meinem Fall ist es /etc/init.d/pm2-init.sh ) und bearbeite die folgenden Variablen USER=pm2 ... export PM2_HOME="/opt/pm2"

In meinem Raspberry PI habe ich Probleme mit der Vererbung von Socket-Dateiberechtigungen, sie sind schreibgeschützt für Gruppen gesetzt, anstatt rwx wird auf das Home-Verzeichnis angewendet: 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

Nach stundenlangem Googlen fand ich endlich die Lösung: Ich fügte dem umask 0002 die folgende Zeile hinzu: umask 0002 und bekam es: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

Das ist alles.