Systemd PHP-Startskript Centos 7

Systemd PHP-Startskript Centos 7

Ich habe ein PHP-Skript, für das ich einen Dienst erstellen möchte. Ich habe den Dienst erstellt, kann ihn jedoch nicht starten. Das Seltsame ist, dass genau dieselbe Dienst-UNIT auf meinem anderen Server mit demselben Setup funktioniert. Das PHP-Skript ist so eingestellt, dass es mit dem Schalter -d als Daemon ausgeführt wird. Der Befehl selbst funktioniert einwandfrei, aber nicht über systemd.

Das ist, was ich bekomme

● serverio.service - Socket Server Service
   Loaded: loaded (/etc/systemd/system/multi-user.target.wants/serverio.service)
   Active: inactive (dead) since Wed 2017-01-18 23:41:49 UTC; 2s ago
  Process: 22921 ExecStop=/usr/bin/php /opt/sockets/server.php stop (code=exited, status=0/SUCCESS)
  Process: 22917 ExecStart=/usr/bin/php /opt/sockets/server.php start -d (code=exited, status=0/SUCCESS)
 Main PID: 22917 (code=exited, status=0/SUCCESS)

Jan 18 23:41:49 hostname systemd[1]: Started SocketIO Server Service.
Jan 18 23:41:49 hostname systemd[1]: Starting SocketIO Server Service...

Hier ist meine Serviceakte.

[Unit]
Description=SocketIO Server Service

[Service]
Type=simple
PIDFile=/opt/sockets/phpio.pid
ExecStart=/usr/bin/php /opt/sockets/server.php start -d
ExecStop=/usr/bin/php /opt/sockets/server.php stop

[Install]
WantedBy=multi-user.target

Irgendeine Idee, wie man das zum Laufen bringt?

Antwort1

Wenn alle Einstellungen auf beiden Servern gleich sind, überprüfen Sie die Socket-Berechtigung

Antwort2

Die Daemonisierung des eigenen Prozesses mit dem System ist ein Anti-Pattern. Es wird empfohlen, die Daemonisierungsoption zu entfernen.

Da Sie keine Dämonisierung durchführen, sollten Sie diese PidFile=Option nicht benötigen.

Darüber hinaus müssen Sie nicht einschließen Type=simple, da es simplesich hierbei um den Standardtyp handelt.

ExecStop=Schließlich benötigen Sie die Leitung wahrscheinlich nicht , da systemddie Dienste für Sie gestoppt werden. Suchen Sie nach ExecStop=in, man systemd.serviceum die Details zum Verhalten zu überprüfen, oder probieren Sie es aus.

Zur Frage, warum der Dienst auf Ihrem Dienst funktioniert: Es muss einen Umgebungsunterschied zwischen den beiden Servern geben. Wenn die systemdUnit-Dateien gleich sind, muss das Problem woanders liegen. Überprüfen Sie die Protokolle, die Ihr Dienst beim Startversuch generiert.

verwandte Informationen