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

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

저는 라즈베리 파이를 가지고 있고 재부팅할 때마다 마지막으로 다음 출력이 표시됩니다.

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보다 먼저 시작된다는 의미는 아닙니다.

내 아치 리눅스 서버에서 테스트했는데 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

관련 정보