rklm schrieb:
Warum nicht so?
Ein möglicher Grund fällt mir ein: es könnte sein, dass das Script mehrfach parallel läuft. Wenn die Laufzeiten unterschiedlich sind, dann könnte es sein, dass die letzte Ausführung tatsächlich vor der vorletzten endet. Ist das der Fall? Vielleicht dann mal so:
| pid=$(journalctl -q -o json -t TAG | jq -r '._PID' | awk '{f=found[$1];if(!f||NR-f>1000){found[$1]=NR;last=$1}} END {print last}' )
|
Der Teil ||NR-found[$1]>1000
soll sicher stellen, dass bei Wiederholungen der PID die späteren Ausführungen nicht mit früheren in einen Topf geworfen werden. Ist eine etwas wackelige Heuristik, weil PIDs sich ja generell über die Zeit wiederholen. Man das etwas verbessern, indem man den Zeitraum des Logs beschränkt, z.B. indem man z.B. "-S -2 weeks" bei journalctl
verwendet. Dann reicht womöglich die etwas einfachere Variante:
| pid=$(journalctl -q -o json -t TAG | jq -r '._PID' | awk '{if(!found[$1]){found[$1]=NR;last=$1}} END {print last}' )
|
Oh, da gibt es noch eine Option: da Du Stdout ins Journal leitest, kann man mit der _STREAM_ID arbeiten. Dann könnte man dann so machen:
| since='-1 week'
sid=$(journalctl -q -o json -t TAG -S "$since" | jq -r '._STREAM_ID' | awk '{if(!found[$1]){found[$1]=NR;last=$1}} END {print last}' )
journalctl -t TAG -S "$since" "_STREAM_ID=$sid"
|
Interessant, was man unterwegs so alles lernt - danke dafür! 👍