回答:
systemdversion 以降232、呼び出しIDの概念があります。ユニットが実行されるたびに、ユニットは一意の128ビットの呼び出しIDを持ちます。MainPIDどちらをリサイクルできるか、またはActiveEnterTimestamp解決に問題がある可能性があるのとは異なり、特定のsystemdユニット呼び出しのすべてのログを取得するフェイルセーフな方法です。
ユニットの最新の呼び出しIDを取得するには
$ systemctl show --value -p InvocationID openipmi
bd3eb84c3aa74169a3dcad2af183885b
たとえば、openipmi失敗したかどうかに関係なく、最新の呼び出しのジャーナルを取得するには、1つのライナーを使用できます
$ journalctl _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value openipmi.service`
-- Logs begin at Thu 2018-07-26 12:09:57 IDT, end at Mon 2019-07-08 01:32:50 IDT. --
Jun 21 13:03:13 build03.lbits openipmi[1552]: * Starting ipmi drivers
Jun 21 13:03:13 build03.lbits openipmi[1552]: ...fail!
Jun 21 13:03:13 build03.lbits openipmi[1552]: ...done.
(--valueはsystemd 230、より古いから利用可能ですInvocationID)
どのタイムスタンプが最も理にかなっているのかわかりませんが、これは私にとってはうまくいきます。うまくいけばsystemctl show、awk よりもタイムスタンプを操作するより良い方法があります-タイムスタンプの形式を制御する方法を理解できませんでした。
unit=foo.service
ts=$(systemctl show -p ActiveEnterTimestamp $unit)
echo $ts
ActiveEnterTimestamp=Fri 2016-11-11 12:30:01 MST
journalctl -u $unit --since "$(echo $ts | awk '{print $2 $3}')"
systemctl show -p ActiveEnterTimestamp thermo.service | awk '{print $2 \" \" $3}'" -fu thermo.service | 少ない
systemctl show -p ActiveEnterTimestamp --value $unitため、余分なawkは必要ありません
ブートフラグを使用して、そのブートからログのみを取得できます。例えば
journalctl _SYSTEMD_UNIT=avahi-daemon.service -b 5
これらはあなたを助けるかもしれません:
journalctl -u foo.service | テール-n 2
または、2を予想される行数に置き換えます
journalctl -u foo.service --since = ' 2016-04-11 13:00:00 '
これらを組み合わせて、最初に最後の実行時のタイムスタンプを取得し、そのタイムスタンプを--sinceスイッチで使用することもできます。
Journalctlでフィールドフィルターを使用できます。例えば
journalctl _PID=1234
次を使用して、使用可能なすべてのフィールドのリストを取得します。
journalctl --fields --unit kubelet
1つの使用可能なフィールドは_PIDです。
を使用して、実行中のプロセスのPIDを取得できます。 pidofまたはsystemctl show --property MainPID <SERVICE_NAME>
そこで、現在のKubernetes kubeletプロセスからログを取得する方法を次に示します。
# journalctl --unit kubelet _PID=$(systemctl show --property MainPID kubelet 2>/dev/null | cut -d= -f2) | head
Kubernetesのインストールが非常に難しい理由を教えてください:-(
journalctl -r | grep -m1 foo.service
journalctl --user -u UNITFILE -f -o json-pretty役に立つかもしれません。MESSAGE特にフィールドを探しています。必要な場合もあることがわかりました。USER_INVOCATION_IDまた、一部のメッセージには呼び出しIDが添付されていないため、このメカニズムでフィルタリングすることはできません。わからない多分私のロギングが間違って設定されている理由..