2017-02-16 1 views
0

Ich habe die folgenden (anonymisierten) systemd Skript tomcat-autostart.service, gespeichert in "/usr/lib/systemd/system/tomcat-autostart.service" genanntSystemd-Skript: Zuweisung außerhalb des Abschnitts; Fehlende '='

[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 Ausführen

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

erhalte ich 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 hatte es für eine Weile arbeiten, dann habe ich einige Kommentare über die Zeile "[Unit]" hinzugefügt, und es funktioniert nicht mehr. Ich entfernte dann die Kommentare und änderte wahrscheinlich unbeabsichtigt etwas anderes im Skript, und ich konnte es danach nicht mehr wieder in Betrieb nehmen.

Es scheint es in seinem eigenen Widerspruch zu erfreuen. Die erste Fehlermeldung besagt, dass eine Zuweisung in der ersten Zeile ('[Unit]') vorhanden ist, und die dritte besagt, dass der Zuweisung ein '=' - Zeichen fehlt. Im Grunde genommen ist "[Unit]" eine Zuweisung, außer dass es nicht daran liegt, dass ein '=' Zeichen fehlt.

Die Suche nach diesem Problem hat ergeben, dass die zweite Fehlermeldung eine direkte Ursache für die anderen ist. Da es die Abschnittsüberschriften ignoriert, liest es nie die Deklarationen ExecStart und ExecStop. 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)

Antwort

0

Willkommen zu StackOverflow.

Ihr systemd Skript sieht gut aus. Auch wenn ich es auf mein eigenes System kopiere/einfüge und es durch systemd-analyze verify führe, erzeugt es diesen Fehler nicht-- Ich erhalte nur Fehler über Dateipfade, die auf meinem System nicht existieren, aber auf deinem System existieren 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 wurde in der Übersetzung verloren, als Sie es anonymisierten. Führen Sie systemd-analyze verify /usr/lib/systemd/system/tomcat-autostart.service aus und bestätigen Sie die Fehler, die Sie von Ihrer tatsächlichen Datei erhalten. Die Dateien, die Sie ändern, sollten auch in /etc/systemd/system sein. Die Dateien in /usr/lib sollen nur von Paketen verwaltet werden, die Sie installieren. Wenn Ihre Datei in /etc/systemd/system den Namen als parallele Datei im Verzeichnis /usr/lib/systemd/system hat, wird sie überschrieben.

+0

Ich habe überprüft, dass die Anonymisierung nichts geändert hat. Die Zeilen, die geändert wurden, waren die Zeilen Beschreibung, Requires, After, ExecStart und ExecStop sowie der Dateiname der Datei * .service.In der Datei gab es keine einfachen Anführungszeichen. Das Verschieben der Datei nach '/ etc/systemd/system' änderte nichts außer der Ausgabe in'/var/log/messages' (die nun auf '/etc/systemd/system/tomcat-autostart.service 'referenzierte ', statt'/usr/lib/systemd/system/tomcat-autostart.service') Allerdings werde ich dieses Verzeichnis in Zukunft verwenden. –

+0

Siehe aktualisierte Antwort mit dem 'systemd-analyze verify' Tool. –

0

Ich habe dieses Problem gelöst. Es stellt sich heraus, dass die Codierung der Datei geändert wurde, als ich die Kommentare hinzufügte (die Datei von einer UTF-8-Kodierung in eine UTF-16-Kodierung umwandeln). Ich nehme an, dass Systemd UTF-16 nicht unterstützt und interpretierte es als ASCII (oder etwas anderes). Wenn die Codierung wieder in UTF-8 geändert wurde, konnten die Autostart-Skripts wieder funktionieren.

Verwandte Themen