Ich habe diese Unit-Datei in /lib/systemd/system/menu-core-prices-update.service
erstellt :
[Unit]
Description = core-price-update daemon
After network.target = auditd.service
[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop = /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh
[Install]
WantedBy = multi-user.target
Von der Befehlszeile aus kann ich ausführen:
$ /usr/local/bin/start-menu-core-prices-update.sh
und das Programm startet ordnungsgemäß. Aber wenn ich den Daemon starte:
$ sudo systemctl start menu-core-prices-update.service
Ich bekomme diesen Fehler:
Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed
Die Berechtigungen:
-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh
Akzeptierte Antwort:
Ausgabe Nr. 1
Ich habe diesen Thread mit dem Titel gefunden:[Gelöst] Hinzufügen eines benutzerdefinierten Skripts zu systemd, das den gleichen Fehler wie Ihre obige Ausgabe aufweist, hauptsächlich dieses Bit:
Fehlgeschlagen bei Schritt EXEC-Spawning /usr/local/bin/start-menu-core-prices-update.sh:Exec-Formatfehler
Dieser Fehler bedeutet im Allgemeinen, dass Ihr Skript eines oder mehrere der folgenden Probleme aufweist:
- Ist nicht ausführbar
- Der Shebang fehlt (
#!/bin/bash
)
Um diese zu beheben, stellen Sie sicher, dass Ihr Skript ausführbar ist:
$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh
Und stellen Sie sicher, dass Sie einen Shebang hinzufügen, #!/bin/bash
nach oben.
Ausgabe Nr. 2
Anscheinend haben Sie einen Tippfehler in dieser Zeile:
After network.target = auditd.service
Dies sollte wahrscheinlich so lauten:
After=network.target auditd.service
Ausgabe Nr. 3
Es ist mir unklar, warum Sie den Type = forking
verwenden . Wenn Sie diesen Typ verwenden, sind Sie ExecStart=
ist erforderlich, um eine Methode zu verwenden, die fork()
aufruft . Sie nehmen auch an, dass Sie PIDFile=
verwenden Option.
Ich würde erwarten, dass Ihre Java-Anwendung mit beiden simple
gut funktionieren würde oder oneshot
. Weitere Informationen hierzu finden Sie in diesen U&L-Fragen und Antworten mit dem Titel:Forking in a systemd script.