TL;DR
$ sudo watch -n0.1 date 012213002017
※ サーバの時間を0.1秒間隔で変更し続けます
そもそも何がしたかったのか
サーバの時刻を好きな値に設定して,日付によって挙動がガラリと変わるプログラムのチェックを行おうとしていました。
今回大切なのは日付で,時刻はまぁある程度指定出来れば何時でも大丈夫でした。
どんな問題が起きたか
dateコマンドでLinuxサーバの時刻変更 - Qiitaを参考にしてdate
コマンドでサーバの時刻を変更したはいいけれど,少し時間が経つと勝手に時刻が戻ってしまいます。
$ date
2017年 1月 6日 金曜日 14:20:01 JST
$ sudo date -s "2017/01/22 13:00"
2017年 1月 22日 日曜日 13:00:00 JST
>>> elapsed time 382h39m57s
$ date
2017年 1月 22日 日曜日 13:00:01 JST
$ date
2017年 1月 22日 日曜日 13:00:02 JST
$ date
2017年 1月 22日 日曜日 13:00:03 JST
$ date
2017年 1月 22日 日曜日 13:00:04 JST
$ date
2017年 1月 22日 日曜日 13:00:05 JST
$ date
2017年 1月 22日 日曜日 13:00:06 JST
$ date
2017年 1月 22日 日曜日 13:00:08 JST
$ date
2017年 1月 22日 日曜日 13:00:09 JST
$ date
2017年 1月 6日 金曜日 14:20:14 JST
えぇ…… なんでぇ……。
もちろんcronやら何やらで戻しているわけでもなく,他の誰かがイジっているわけでもなく……。
ちょこっと調べてみると,-s
は本来時刻を設定するオプションではないとかなんとか。
そうなの? じゃあ……。
$ date
2017年 1月 6日 金曜日 14:21:57 JST
$ sudo date 012213002017
2017年 1月 22日 日曜日 13:00:00 JST
>>> elapsed time 382h38m1s
$ date
2017年 1月 22日 日曜日 13:00:01 JST
$ date
2017年 1月 22日 日曜日 13:00:02 JST
$ date
2017年 1月 22日 日曜日 13:00:03 JST
$ date
2017年 1月 6日 金曜日 14:22:04 JST
はい,関係ナス。
定期的に実行する
Linuxには定期的にコマンドを実行する方法として,watch
コマンドがあるみたいです。
今回は正確には年月日を指定したくって,時間はまぁどうでも良かったので,今度は0.1秒間隔で指定した日時に変更し続けることを考えます。
早速watch
コマンドを使います。
いざ!!
$ sudo watch -n1 date -s "2017/01/22 13:00"
Every 1.0s: date -s 2017/01/22 13:00 Fri Jan 6 14:23:39 2017
date: the argument `13:00' lacks a leading `+';
when using an option to specify date(s), any non-option
argument must be a format string beginning with `+'
詳しくは `date --help' を実行して下さい.
ちょっと上手くいったかと思いましたが今度は少し経つとエラーが出ます。
なんだかdate
コマンドのオプションとして指定している"2017/01/17 13:00"
の半角スペース
の所為か13:00
で変な解釈? が始まっている? っぽいのかなこれ?
で,あればスペースを抜けば良いのかな?
と言うことでコチラを実行したところ,安定して動作します。
$ sudo watch -n1 date 012213002017
Every 1.0s: date 012213002017 Sun Jan 22 13:00:01 2017
2017年 1月 22日 日曜日 13:00:00 JST
これでも安定したとは言え,たまーに,ふと元の時刻に戻る事があります。
watch
の実行間隔は現在1.0[s]としているので,この合間を縫って勝手に時刻が戻ることがあるのでしょう。
解決
$ sudo watch -n0.1 date 012213002017
Every 0.1s: date 012213002017 Sun Jan 22 13:00:00 2017
2017年 1月 22日 日曜日 13:00:00 JST
素晴らしい……。
やっと思うように 日付を変更 0.1秒間隔で指定した日時に変更し続けることが出来ました。
以上!!
※ サーバの解釈する時をほぼ止めるような挙動になるので,本番などのサーバ上では行わないように注意をして下さい
※ ローカル環境などの,自分しか触らないようなサーバでのみ試してみて下さい