/ / systemd script: Zuweisung außerhalb des Abschnitts; Fehlendes '=' - systemd, Autostart

systemd-Skript: Zuweisung außerhalb des Abschnitts; Fehlendes '=' - Systemd, Autostart

Ich habe das folgende (anonymisierte) systemd-Skript namens tomcat-autostart.service, das in "/usr/lib/systemd/system/tomcat-autostart.service" gespeichert ist.

[Unit]
Description=Tomcat Autostart Script
Requires=var-www-projects.mount
After=var-www-projects.mount

[Service]
Type=forking
ExecStart=/usr/bin/tomcat-autostart start
ExecStop=/usr/bin/tomcat-autostart stop

[Install]
WantedBy=multi-user.target

Nach dem Rennen

sudo systemctl daemon-reload
sudo systemctl enable tomcat-autostart.service

Ich bekomme die Fehlermeldung:

Failed to execute operation: Bad message

Und ich bekomme auch die folgende Ausgabe in / var / log / messages

Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Assignment outside of section. Ignoring.
Feb 17 11:29:53 cheese systemd: tomcat-autostart.service lacks both ExecStart= and ExecStop= setting. Refusing.
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing "=".
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing "=".

Ich ließ es eine Weile arbeiten, dann fügte ich einige hinzuKommentare über der Zeile "[Einheit]", und es funktioniert nicht mehr. Ich habe dann die Kommentare entfernt und wahrscheinlich ungewollt etwas anderes im Skript geändert, und danach konnte ich es nicht mehr zum Laufen bringen.

Es scheint es an seinem eigenen Widerspruch zu erfreuen. Die erste Fehlermeldung besagt, dass in der ersten Zeile ("[Einheit]") eine Zuordnung vorhanden ist, und die dritte besagt, dass der Zuweisung ein "=" - Zeichen fehlt. "[Einheit]" ist also im Grunde eine Zuweisung, außer dass dies nicht der Fall ist, weil ein "=" - Zeichen fehlt.

Die Suche nach diesem Problem hat dies festgestelltDie zweite Fehlermeldung ist eine direkte Ursache für die anderen. Da die Abschnittsüberschriften ignoriert werden, werden die ExecStart- und ExecStop-Deklarationen niemals gelesen. Wenn ich die erste und dritte Fehlermeldung lösen kann, sollte ich in der Lage sein

Was ist das eigentliche Problem mit meinem Skript? Das Ausführen von "sudo / usr / bin / tomcat-autostart start" ist wie erwartet erfolgreich, und die häufigste Ursache im Internet für diese Fehlermeldung ist, dass das Skript keine absoluten Pfade verwendet (was ich in diesem Fall tue).

Antworten:

1 für die Antwort № 1

Ich habe dieses Problem gelöst. Es stellt sich heraus, dass die Codierung der Datei geändert wurde, als ich die Kommentare hinzufügte (Umwandlung der Datei von einer utf-8-Codierung in eine utf-16-Codierung). Ich gehe davon aus, dass systemd utf-16 nicht unterstützt und es als ASCII (oder etwas anderes) interpretiert. Durch das Zurücksetzen der Codierung auf utf-8 konnten die Autostart-Skripte wieder funktionieren.


0 für die Antwort № 2

Willkommen bei StackOverflow.

Ihre systemd Skript sieht gut aus. Auch wenn ich es kopiere / in mein eigenes System einfüge und es durchführe systemd-analyze verifyEs wird dieser Fehler nicht generiert. Ich erhalte nur Fehler zu Dateipfaden, die auf meinem System nicht vorhanden sind, aber auf Ihrem vorhanden sein sollten:

systemd-analyze verify ~/tmp/t.service
t.service: Failed to create t.service/start: Unit var-www-projects.mount not found.
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory

Ich denke, der Fehler ging bei der Übersetzung verloren, als Sie ihn anonymisierten. Lauf systemd-analyze verify /usr/lib/systemd/system/tomcat-autostart.service und bestätigen Sie die Fehler, die Sie von Ihrem erhalten tatsächlich Datei.

Außerdem sollten sich die von Ihnen geänderten Dateien in befinden /etc/systemd/system. Die Dateien in /usr/lib sollen nur von Paketen verwaltet werden, die Sie installieren.

Wenn Ihre Datei in /etc/systemd/system hat den Namen als parallele Datei in /usr/lib/systemd/system Verzeichnis, es wird es überschreiben.