/var/log/wtmp를 업데이트하기 전에 fake-hwclock을 실행하는 방법은 무엇입니까?

/var/log/wtmp를 업데이트하기 전에 fake-hwclock을 실행하는 방법은 무엇입니까?

나는 Raspberry Pi를 가지고 있으며 재부팅할 때마다 끝에 다음 출력이 표시됩니다.

root@RaspberryPi:~# last | grep boot
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00   still running
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00   still running
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)

이는 fake-hwclock 및 하드웨어 RTC를 설치했음에도 불구하고 마찬가지입니다.

현재 아래와 같이 fake-hwclock.service 서비스가 sysinit.target보다 먼저 시작됩니다.

[Unit]
Before=sysinit.target

[Service]
ExecStart=/sbin/fake-hwclock load

[Install]
WantedBy=sysinit.target

/var/log/wtmp가 업데이트되기 전에 어떻게 실행되도록 합니까?

답변1

나는 이것이 systemd-update-utmp의 버그라고 생각합니다. 여기 댓글을 참고하세요:https://github.com/systemd/systemd/issues/6057#issuecomment-435247567

해결 방법은 기본 시스템 인스턴스에 제어권을 전달하기 전에 initramfs에서 fake-hwclock을 실행하는 것입니다.

답변2

wtmp "다시 시작" 로그인 기록은 systemd-update-utmp systemd 서비스에 의해 처리됩니다. sysinit 대상보다 먼저 시작해야 합니다. 즉, 아직 시작되지 않은 경우 시작이 완료되기 전에 서비스가 시작됩니다. 이는 systemd-timesyncd가 항상 systemd-update-utmp보다 먼저 시작된다는 의미는 아닙니다.

내 아치 Linux 서버에서 테스트했는데 systemd-timesyncd는 systemd-update-utmp 이전에 항상 잘 작동했습니다. 반면에, 그들은 거의 항상 서로 한 pid 떨어져 있습니다.

그러나 명시적으로 NTP 뒤에서 실행되지 않기 때문에 이는 여전히 버그로 간주되어야 한다고 생각합니다.

시스템 매뉴얼에서:

"= 다음에Before=, 즉 After=는 나열된 장치 시작이 완료된 후 구성된 장치가 시작되도록 보장합니다."

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

당신이 해야 할 일:

systemctl edit systemd-update-utmp

[Unit]
After=systemd-timesyncd.service
Wants=systemd-timesyncd.service

관련 정보