時間を一時的に変更する


18

1日の特定の時間にのみ発生するソフトウェアの側面をテストする必要があります。丸1日待つ(そして午前2時にここに到着する)のではなく、時間を変更したいと思います。

しかし、私はそれを永久に変更したくない。

を使用して時間を変更し、date再び元に戻すことができますが、より良い方法はありますか?

問題のOSは、VMで実行されているRHEL6です。


価値のあることについては、VM内の時間を一時的に変更するのに苦労しましたが、スタンドアロンシステムには問題がありませんでした。これを読む価値があるかもしれません:Ubuntuで時刻同期を無効にする
-GrandAdmiral

回答:


24

libfaketimeGitHubにもある)と呼ばれるライブラリがあります。これにより、システムに特定の時間をアプリケーションに報告させることができます。プログラムの実行中にシステムに固定時間を報告させるか、特定の時間(01:59:30など)にクロックを開始することができます。基本的に、ライブラリローダーを介してプログラムのメモリ内イメージにfaketimeライブラリをフックし、システム時間に関連するすべてのシステムコールを独自の方法でキャプチャして処理します。システム時間を正確に変更するわけではありませんが、実行中の他の何かに影響を与えることなく、特定のアプリケーションに報告される時間を変更します。システム時刻)。

使用方法にはさまざまなバリエーションがありますが、libfaketimeを使用してプロセスが考える時間を変更すると、試してみるためのサンプルコードとともにかなり詳細なリストが表示されます。また、Googleは、検索対象を知っていれば、いくつかの例を発掘できるはずです。

RHELリポジトリから事前にパッケージ化されたものは入手できないようですが、たとえばDebianはパッケージ名で提供していますfaketime。また、ソースコードからビルドするのも簡単です(明らかに、configure手順などは必要ありません)。


1
Fedora / CentOS / RHELリポジトリには、これのプリビルドはありません。ここにはこのRPMがありますが、CentOS用に再構築する必要があります。
slm

@slm残念ですが、ソースからビルドするのは難しくないはずです(試していないと言いました)。
CVn

1
いいえ、私はみんなに見ないように彼らを救うようにみんなに知らせていました。それはかなり単純に見えます。
slm

6

私がすることは、最初にサービスインストールntpして、リモートサーバーと時間を同期することです。次に、サービスを停止し、日付を手動で変更し、再生してサービスを再起動します。

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

1
「私が知る限り、システム全体のことなので、1つのプロセスの時間だけを変更することはできません。」実際には、ある意味では可能です。私の答えをご覧ください。
CVn

2
@MichaelKjörlingは確かにですが、執筆時点での私の知識はあなたの答えにまでは及びませんでした。私が知る限り、方法はありません:)。
テルドン

回答を投稿する約90秒前に回答を投稿しました。;)
CVn

1
@MichaelKjörlingうん、そして私は実際に私のものを編集して(あなたがそれを見たときに投稿した直後に行われました)、「私の知る限り」を追加しました:)。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.