
Ich habe einen benutzerdefinierten Dienst {start|stop|restart|reload|force-reload|status}
für StoneDb erstellt (eine modifizierte MySQL-Version), aber beim Überprüfen des Status erhalte ich diesen Fehler:
Das bedeutet eindeutig, dass der Befehl nicht von StoneDb übernommen wird, auch wenn ich dasselbe Skript verwende, um den Dienst manuell zu verwalten.
[Unit]
Description=StoneDB database server
After=network.target
#StartLimitIntervalSec=90
[Service]
Type=forking
ExecStart=/opt/stonedb57/install/mysql_server
TimeoutSec=300
[Install]
WantedBy=multi-user.target
Was fehlt mir hier?
Antwort1
Dersystemctl
Befehle zum Starten und Stoppen einesServiceeinheitÜbergeben Sie Ihre (systemctl) Befehlszeilenargumente nicht, der ExecStart=
Befehl zum Starten des Dienstes wird wortwörtlich wie in der Diensteinheit definiert ausgeführt.
Wenn dieses Skript ein Argument erwartet, also eine Option wie stop
oder start
, wie Ihre Fehlermeldung nahelegt, muss dieses Argument in der ExecStart=script some-argument
Definition enthalten sein.
Wie bereits kommentiert:
[Service]
Type=forking
ExecStart=/opt/stonedb57/install/mysql_server start
ExecStop=/opt/stonedb57/install/mysql_server stop
ExecReload=/opt/stonedb57/install/mysql_server reload
TimeoutSec=300
...
Anstatt jedoch das mysql_server
Hilfs-/Wrapper-Skript aufzurufen, könnten Sie die nativere systemd-Service-Unit verwenden, die von MySQL und StoneDB als Service-Unit-Vorlage bereitgestellt wird:
https://github.com/stoneatom/stonedb/tree/stonedb-5.7-dev/scripts/systemd