beim Logging verzweifle ich gerade, ein kleines bisschen, weil immer irgendetwas nicht funktioniert.
bis jetzt verwende ich zum Loggen
Code: Alles auswählen
echo "${Nachricht}" | systemd-cat -p ${Prioritaet} -t mein_dienst
Damit habe ich Meldungen zwar im Log, sehe sie aber nicht, wenn ich nach (m)einer Unit filtere.
Versuche ich systemd-cat mit logger zu ersetzen ist es erst einmal dasselbe – mit dem Unterschied, dass ich bei logger eine PID angeben könnte. Allerdings geht das nur wenn ich logger als root ausführe, was ich nicht will. Schließlich habe ich meine unit gerade erst von root auf einen unprivilegierten Benutzer umgestellt und ich bin mir nicht einmal sicher, dass das mein Problem lösen würde.
Außerdem komme ich gar nicht soweit, weil die Meldungen nicht im Log erscheinen, wenn ich es so versuche
Code: Alles auswählen
logger --priority ${Prioritaet} --tag mein_dienst "${Nachricht}"
Im arch-Forum habe ich dann noch folgenden Lösungsvorschlag gefunden
Code: Alles auswählen
LOGPIPE="$(mktemp -u)"
mkfifo "${LOGPIPE}"
systemd-cat -t mein_dienst < "${LOGPIPE}" &
exec 3>"${LOGPIPE}"
function log ()
{
echo "<${2}> ${1}" >&3
}
function handle_term ()
{
### Diese Meldung funktioniert nicht
log "bin dabei mich zu beenden" 4
exec 3>&-
rm "${LOGPIPE}"
exit
}
trap handle_term SIGTERM
### Hier folgt mein Skript mit weiteren (funktionierenden) Log-Ausgaben
log "Nachricht" 5
exec 3>&-
rm "${LOGPIPE}"
Nur das mit dem Abfangen von SIGTERM funktioniert nicht so recht. Abgefangen wird es schon, aber scheinbar nur im Skript und nicht von bzw. für systemd-cat? Jedenfalls erhalte ich bei SIGTERM im Log
Code: Alles auswählen
May 20 22:22:57 pc mein_dienst[1102]: /usr/local/bin/mein_dienst: line 43: echo: write error: Broken pipe
Stimmt es überhaupt, dass SIGTERM an die Kinder (systemd-cat) weitergereicht wird und das die Ursache ist?
Dann müsste ich SIGTERM auch für systemd-cat abfangen (geht das überhaupt/wie mach ich das)?
Oder bin ich sowieso komplett auf dem Holzweg und jemand hat einen komplett anderen Vorschlag wie ich zum Ziel komme (vorzugsweise ohne named pipe)?
lg smutbert