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 simple
sich hierbei um den Standardtyp handelt.
ExecStop=
Schließlich benötigen Sie die Leitung wahrscheinlich nicht , da systemd
die Dienste für Sie gestoppt werden. Suchen Sie nach ExecStop=
in, man systemd.service
um 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 systemd
Unit-Dateien gleich sind, muss das Problem woanders liegen. Überprüfen Sie die Protokolle, die Ihr Dienst beim Startversuch generiert.