systemd Skript: Zuordnung außerhalb der Sektion; Missing '='
Habe ich die folgende (anonymisierte) systemd Skript namens tomcat-autostart.service, gespeichert in "/usr/lib/systemd/system/tomcat-autostart.service"
[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
Bekomme 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 '='.
Hatte ich es funktioniert für eine Weile, dann fügte ich einige Kommentare über die "[Einheit] " - Zeile, und es aufgehört zu arbeiten. Ich habe dann die Kommentare entfernt, und wahrscheinlich unabsichtlich verändert etwas anderes in das Skript, und ich habe nicht in der Lage, um es arbeiten wieder.
Scheint es zu erfreuen, es in seinem eigenen Widerspruch. Die erste Fehlermeldung sagt, dass es einen Einsatz in der ersten Zeile ("[Einheit]"), und der Dritte sagt, dass die Zuordnung fehlt das Zeichen'='. Also im Grunde, '[Einheit] "ist eine Zuordnung, mit der Ausnahme, dass es ist nicht, weil es fehlt das Zeichen'='.
Suche für dieses problem hat festgestellt, dass die zweite Fehlermeldung ist eine direkte Ursache des anderen. Denn es ignoriert den Abschnitt Header, es nie liest die ExecStart und ExecStop Erklärungen. Wenn ich lösen die erste und die Dritte Fehlermeldungen, ich sollte in der Lage sein, um
Was ist das tatsächliche problem mit meinem script? Ausführen von 'sudo /usr/bin/tomcat-autostart-start" gelingt als erwartet, und die häufigste Ursache auf das internet für diese Fehlermeldung ist, dass das Skript nicht absolute Pfade verwenden (was ich in diesem Fall)
InformationsquelleAutor Digit Cruncher | 2017-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich dieses Problem gelöst. Es stellt sich heraus, dass die Codierung der Datei geändert wurde, wenn ich Hinzugefügt die Kommentare (drehen der Datei von utf-8-Kodierung zu utf-16-Kodierung). Ich vermute, dass systemd nicht unterstützt, ist utf-16, und interpretierte es als ASCII - (oder etwas anderes). Ändern der Kodierung zurück zu UTF-8 erlaubt die autostart-Skripts zu starten, wieder zu arbeiten.
InformationsquelleAutor Digit Cruncher
Willkommen zu StackOverflow.
Ihre
systemd
Skript sieht gut aus. Auch wenn ich copy/paste auf meinem eigenen system und führen Sie es durchsystemd-analyze verify
ist es nicht dieser Fehler generiert-- bekomme ich nur Fehler über die Datei-Pfade, die nicht existieren auf meinem system, sollte aber vorhanden sein, auf die Ihre:Ich denke, der Fehler war in der übersetzung verloren gehen, wenn Sie anonymisiert. Führen Sie
systemd-analyze verify /usr/lib/systemd/system/tomcat-autostart.service
aus und bestätigen Sie die Fehler, Sie werden immer von Ihrem tatsächlichen - Datei.Auch, die Dateien, die Sie ändern sollten, werden in
/etc/systemd/system
. Die Dateien in/usr/lib
sollen nur verwaltet werden, indem Pakete, die Sie installieren.Wenn Sie Ihre Datei in
/etc/systemd/system
hat den Namen als eine parallele Datei in/usr/lib/systemd/system
Verzeichnis, wird es außer Kraft setzen./etc/systemd/system
nichts verändert, außer für die Ausgabe in/var/log/messages
(die nun verwiesen wird/etc/systemd/system/tomcat-autostart.service
statt/usr/lib/systemd/system/tomcat-autostart.service
) Allerdings verwende ich das Verzeichnis in die Zukunft.Siehe aktualisierte Antwort zu erwähnen
systemd-analyze verify
tool.InformationsquelleAutor Mark Stosberg