Wie kann ich die genaue Ursache dafür herausfinden, dass der Systemd-Dienst nicht gestartet werden kann (der Dienst hat eine falsche Unit-Dateieinstellung)?

Wie kann ich die genaue Ursache dafür herausfinden, dass der Systemd-Dienst nicht gestartet werden kann (der Dienst hat eine falsche Unit-Dateieinstellung)?

Das ist wirklich ärgerlich, da systemdnur geantwortet wird, dass meine Konfiguration einer Servicedatei falsch ist, aber nicht angegeben wird, wo genau der Fehler liegt:

/lib/systemd/system/auto_pgha.service:

[Unit]
Description=PostgreSQL High Availability
After=network.service
After=firewalld.service


[Service]
Type=simple
WorkingDirectory=/etc/repmgr
ExecStartPre=/bin/bash -c 'echo -e "\n"  `date +"%Y/%m/%d %a, %X"`": STARTING \n"  >> pgha.log'
ExecStart=/bin/bash -c "python3 pg_high_availability.py  &>> pgha.log"
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Innerhalb des Verzeichnisses /etc/repmgrfunktionierten die beiden Befehle einwandfrei. Aber der systemd-Dienst antwortete nur mit einem Fehler:

# systemctl start auto_pgha
Failed to start auto_pgha.service: Unit auto_pgha.service has a bad unit file setting.
See system logs and 'systemctl status auto_pgha.service' for details.

# systemctl status -l auto_pgha
○ auto_pgha.service - PostgreSQL High Availability
     Loaded: bad-setting (Reason: Unit auto_pgha.service has a bad unit file setting.)
......
auto_pgha.service: Unit configuration has fatal error, unit will not be be started. 

Antwort1

Sie können den Befehl verwenden systemd-analyze verify. Wenn wir den Inhalt Ihrer Frage in einfügen pgha.service, sehen wir:

$ systemd-analyze verify pgha.service
.../pgha.service:10: Failed to resolve unit specifiers in echo -e "
"  `date +"%Y/%m/%d %a, %X"`": STARTING
"  >> pgha.log: Invalid slot
pgha.service: Unit configuration has fatal error, unit will not be started.
Unit pgha.service has a bad unit file setting.

Sie erhalten diesen Fehler, weil systemd selbst%<something> Token verwendet (sieheAbschnitt „Spezifizierer“ dersystemd.unit(5) Manpage.

Sie müssten schreiben:

ExecStartPre=/bin/bash -c 'echo -e "\n"  `date +"%%Y/%%m/%%d %%a, %%X"`": STARTING \n"  >> pgha.log'

verwandte Informationen