Caution! 本記事で紹介しているやり方は、2022年4月1日以降は利用できなくなります!いままでありがとうございました!
利用不可になる詳細については、以下のページを参照ください。
https://jjy.nict.go.jp/httphttps-index.html
以下、記事の内容は残しておきます。
あなたのlinux、もしくはmac、なんだったらbusybox、時間合ってますか?なに、Proxy環境下だからntpがちゃんと動いてくれなくていつの間にか時刻がズレてく日々を送っている?
このポストは
訳あってProxy環境下で作業をせざるを得ないが、ntpをProxy環境下でちゃんと動作させる術を調べるのが面倒な人のための記事です。
※ 後述しますが、Proxy自体は使います。ntpを使わずに時間を合わせられるという内容です。
(2016.08.31更新) 真・下の一行を打ちこめば時間が合います(必要に応じて sudo をつけてね)
date --set @"$(wget -q https://ntp-a1.nict.go.jp/cgi-bin/jst -O - | sed -n 4p | cut -d. -f1)"
簡単に解説
wget -q https://ntp-a1.nict.go.jp/cgi-bin/jst -O -
この部分で、nictさんから時間を取得しています。以下のような内容が返ってきます。
<HTML>
<HEAD><TITLE>JST</TITLE></HEAD>
<BODY>
1472647059.250
</BODY>
</HTML>
BODYに書いてある内容はいわゆるエポック秒というやつで、1970年1月1日から現在までにどんだけ時間が経過しているかを秒で表しているというやつです。
もしあなたのデバイスがProxy環境化にあり、すんなりwgetができない場合はここでProxyを設定する必要があるかもしれません。
典型的には、export http_proxy=http://[your.proxy.url:port]
みたいにすればProxyは通せます。
sed -n 4p
この部分で、4行目を一行だけ抜き出しています。
上記の例の場合だと 1472647059.250
の部分が抜き出せます。
cut -d. -f1
この部分で、「ピリオドで区切った場合の1フィールド目」を抜き出しています。
-d
でデリミター指定、-f
で何番目のフィールドかを指定、ですね。
これで 1472647059
が抜き出せます。これを、
date --set @[ここに↑で抜き出したエポック秒を入れる]
という形で与えてあげることで、時間合わせを行います。
管理者権限が必要な場合は、ここに sudo
が必要です。
いつ使うのか
- ntpがProxyを越えてくれないよ、でも設定の方法よくわかんないよ、という方(私)が時間を合わせるとき。
- ちょっと今だけ時間合えばいいから、という今だけ急ぎたいとき。
- ntpさん、自動で時間合わせするように設定したけど、なかなかやってくれないな、、、まだかなまだかな、となってしまうせっかちな方(私)が瞬時に時間を合わせようとするとき。
- etc...
なんで時間合わすのか
時間なんてずらしっぱなしでいいじゃん、別に困らないよ、というのであれば、いいのです。それでいいです。
ただ時間があってないと困るケースがあって、それはSSLの通信を行う場合。時間が合ってないと怒られたりします。
Arch Linux ユーザならAURを使うとき(yaourtコマンド等を使うとき)に時間があってないと怒られます。これはGitHubのリポジトリを見に行く(このときSSL通信を行う可能性がある)からです。
時間が合うのはわかったとして、毎日やるのか
毎日上記のコマンドを打つのも面倒ですよね!
であれば、cronで毎時実行するようにしてやればいいですよ!
@kumabook 情報提供ありがとうございました!