제가 개발 중인 소프트웨어 프로젝트에서 특정 시간대와 관련된 버그를 해결하기 위해 시스템 시계의 변경 사항을 복사하여 timedatectl
소프트웨어의 동작을 확인해 보았습니다.
나는 이것을 실행하여 달성하려고 노력하고 있습니다.
timedatectl set-timezone America/New_York
timedatectl set-local-rtc 1
timedatectl set-ntp false
timedatectl set-time "2017-03-12 01:58:50" && hwclock -w
이 작업을 수행하고 timedatectl
즉시 실행하면 예상대로 다음과 같은 시간이 표시됩니다.
Local time: Sun 2017-03-12 01:58:51 EST
Universal time: Sun 2017-03-12 06:58:51 UTC
RTC time: Sun 2017-03-12 01:58:51
Time zone: America/New_York (EST, -0500)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes
그러나 10초 후 분이 ( xx:59
)로 바뀌면 현지시간과 세계시간이 현재시간으로 "재시작"됩니다.
Local time: Wed 2019-08-07 21:01:41 EDT
Universal time: Thu 2019-08-08 01:01:41 UTC
RTC time: Sun 2017-03-12 01:58:57
Time zone: America/New_York (EDT, -0400)
System clock synchronized: no
systemd-timesyncd.service active: no
RTC in local TZ: yes
내가 여기서 무엇을 놓치고 있는 걸까요?
내 설정은 Vagrant Ubuntu 18 VM(Linux vagrant 4.15.0-51/vm box "bento/ubuntu-18.04")입니다.
답변1
이는 현재 보고 있는 동작을 설명하지는 않지만 제목의 질문에 대한 대답은 되어야 합니다.
시스템 시간을 변경하는 대신 다음과 같은 도구를 사용할 수 있습니다.faketime
및 TZ
환경 변수:
$ date; faketime -f -15d date; TZ=America/New_York faketime -f -15d date
Thu 8 Aug 10:21:13 CEST 2019
Wed 24 Jul 10:21:13 CEST 2019
Wed 24 Jul 04:21:13 EDT 2019
이렇게 하면 시스템의 나머지 부분에 영향을 주지 않고 자신의 시간대, 날짜 및 시간을 사용하여 프로그램을 실행할 수 있습니다.
핵을 사용하여 애플리케이션에 코드를 삽입하기 때문에 $LD_PRELOAD
정적으로 링크된 실행 파일이나 setuid/setgid 실행 파일에서는 작동하지 않습니다.