타이머에서 실행되는 oneshot 서비스의 출력을 보는 데 특히 관심이 있습니다. --unit
플래그는 가까운이지만, 함께 서비스의 모든 실행을 연결합니다. 내가 생각할 수있는 가장 확실한 방법은 PID를 필터링하는 것이지만, 포크 재사용하는 PID 재사용 / 서비스에 대해 걱정하게 만들고 마지막 PID를 얻는 것은 매우 불편합니다. 로그를 필터링하는 데 사용할 수있는 단일 서비스 실행에 해당하는 다른 식별자가 있습니까?
편집 : 나는 그것이 정답이라면 권위있는 “아니오”를 행복하게 받아 들일 것입니다.
답변
systemd
version 이후 232
에는 호출 ID라는 개념이 있습니다. 장치가 실행될 때마다 고유 한 128 비트 호출 ID가 있습니다. MainPID
재활용 ActiveEnterTimestamp
할 수 있거나 해결에 문제가있는 것과는 달리 특정 시스템 장치 호출의 모든 로그를 가져 오는 안전한 방법입니다.
장치의 최신 호출 ID를 얻으려면
$ systemctl show --value -p InvocationID openipmi
bd3eb84c3aa74169a3dcad2af183885b
openipmi
실패 여부 와 같은 최신 호출 저널을 얻으려면 하나의 라이너를 사용할 수 있습니다
$ 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}')"
답변
부팅 플래그를 사용하여 해당 부팅에서 로그 만 가져올 수 있습니다. 예를 들어
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
사용 가능한 필드는 _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