일시적으로 시간 변경


18

하루 중 특정 시간에만 발생하는 소프트웨어 측면을 테스트해야합니다. 하루 종일 기다리거나 (오전 2시) 여기에 시간을 바꾸고 싶습니다.

그러나 나는 그것을 영구적으로 바꾸지 않고 싶습니다 .

을 사용하여 시간 date을 변경 한 다음 다시 변경할 수 있다는 것을 알고 있지만 더 좋은 방법이 있습니까?

해당 OS는 VM에서 실행중인 RHEL6입니다.


그만한 가치가 있기 때문에 VM 내부의 시간을 일시적으로 변경하는 데 어려움이 있었지만 독립형 시스템에는 아무런 문제가 없었습니다. : 그것은이 읽을 가치가있을 수도 있습니다 우분투 해제 시간 동기화
대 제독

답변:


24

libfaketime( GitHub ) 라는 라이브러리 가있어 시스템에 주어진 시간을 응용 프로그램에보고 할 수 있습니다. 시스템이 프로그램 실행 기간 동안 고정 된 시간을보고하도록하거나 특정 시간 (예 : 01:59:30)에 시계를 시작하도록 할 수 있습니다. 기본적으로, 가짜 로더 라이브러리를 라이브러리 로더를 통해 프로그램의 메모리 내 이미지에 연결하고 시스템 시간과 관련된 모든 시스템 호출을 자체 방식으로 캡처하고 처리합니다. 시스템 시간을 정확하게 변경 하지는 않지만 실행중인 다른 것에 영향을주지 않고 특정 응용 프로그램에 보고 되는 시간을 변경합니다. 시스템 시간).

그것을 사용하는 방법에는 여러 가지 변형이 있지만 libfaketime으로 프로세스가 생각하는 시간을 변경하는 것은 샘플 코드와 함께 철저한 목록을 작성하여 시도하는 것처럼 보입니다 . 검색 대상을 알고 있다면 Google에서 몇 가지 예를 찾아 낼 수도 있습니다.

RHEL 저장소를 통해 사전 패키지로 제공되지는 않지만 Debian은이를 패키지 이름 아래에 제공합니다faketime . 또한 소스 코드를 사용하여 빌드하기를 기대합니다 ( configure단계 또는 이와 비슷한 단계 가 필요하지 않음 ).


1
내가 찾을 수있는 Fedora / CentOS / RHEL 저장소에는 사전 빌드가 없습니다. 여기에이 RPM 이 있지만 CentOS를 위해 다시 빌드해야합니다.
slm

@slm Pity,하지만 소스에서 빌드하기가 어렵지 않아야합니다 (시도하지 않고 말함).
CVn

1
아니, 난 그냥 모든 사람이보고에서 그들을 저장하도록 알리고 있었다. 꽤 똑바로 보입니다.
slm

6

내가 할 일은 먼저 원격 서버와 시간을 동기화 하는 ntp서비스설치하는 것 입니다. 그런 다음 서비스를 중지하고 날짜를 수동으로 변경 한 후 재생하고 서비스를 다시 시작하십시오.

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start

1
"내가 아는 한 시스템 전체의 프로세스이기 때문에 한 프로세스의 시간 만 변경할 수 없습니다." 실제로는 어떤 식 으로든 할 수 있습니다. 내 대답을 참조하십시오.
CVn

2
@ MichaelKjörling은 실제로 글을 쓸 당시의 지식은 귀하의 답변으로 확장되지 않았습니다. 내가 아는 한 방법은 없습니다 :).
terdon

답변을 게시하기 약 90 초 전에 답변을 게시했습니다. ;)
CVn

1
@ MichaelKjörling yup, 나는 실제로 "내가 아는 한"을 추가하기 위해 실제로 편집했습니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.