GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu – Erstellen von Unit-Dateien in Ubuntu 16.04?

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.


Ubuntu
  1. Wie finde ich Dateien auf Ubuntu?

  2. Wie kann ich das Ubuntu-Telefon sichern?

  3. Wie greife ich auf Ubuntu 11.04-Dateien in Windows 7 zu?

  4. Ubuntu erstellt unerwünschte Readme.md~?

  5. Finden Sie heraus, welche Dateien sich in einem Paket in Ubuntu befinden

So spielen Sie MP3 in Ubuntu ab

Kopieren Sie Daten mit rsync auf Ubuntu

So benennen Sie Dateien in Ubuntu 20.04 um

4 ePub-Reader zum Anzeigen von ePub-Dateien auf Ubuntu

Konvertieren Sie mp3-Audiodateien in ogg auf Ubuntu

Dateien in Ubuntu 22.04 finden