◆ 日付を強制的に同期するだけなのに情報があんまりない
◆ ntp 系じゃなくて chrony を使うらしい
◆ ignored なオプションつけたら動いたり できたりできなかったりでよくわからない
◆ API から日付のテキスト取得して date コマンドで設定するのでいいや

時刻合わせなんてよく使うもの のはずなのに意外とそのままコピペできる情報がすぐに出てこないのですよね
設定ファイルをどう書くとかの説明や コマンド全体の紹介はあっても このコマンド打つだけで時間が即修正されるという情報がすごく少ないです
コマンドにオプションでサーバ指定までしている例がググって上にいっぱいでてきてほしいのですけど


一番出てくるのが

# ntpdate ntp.nict.jp

なのですが fedora だと ntpdate コマンドがデフォルトじゃ入ってないです

Chrony

最近では時刻の ntp 関係コマンドは timedatectl になったと聞いて調べてみても全然時刻合わせがなくて 今度は chrony というものを使うとかいう情報が出てきました
chronyd がデーモンで chronyc がコマンドラインで操作するツールのようです

chrony で時刻調整する方法を調べてみてもやっぱり情報があんまりないです
日本語のページを除くとコマンドのマニュアルみたいなページばかりで QA サイトや使い方紹介系のページは全然見当たりません
検索結果のページ数自体がすごく少なめです
本当にこのコマンドが今の主流な日付操作するものであってるんでしょうか……
時刻を即修正する方法なんて需要ありすぎて serverfault などの質問がいっぱいでてくると思ったのですけど


とりあえずサブコマンド一覧を探すと makestep コマンドで即時刻合わせできるらしいのですが 「200 OK」 と出るだけで 時刻はズレたままです
makestep を指定してググると -a オプションをつけてる例を見つけたのでやってみると 時刻が更新されました
-a ってどういうなのか調べてみると

       -a
This option is ignored and is provided only for compatibility.

このオプションは無視されます
互換性のためだけに提供されています

え?!どういうこと?
無視されるなら -a なくても一緒ということですよね

もう一度 今度はわざと時間をズラして試してみました
すると -a をつけたときだけちゃんと修正されました
マニュアルが当てにならないってもうドコを頼ればいいの……

-a を使うって書いてるページをいくつか見ても a について具体的に書いてるところはありませんでした

# chronyc -a makestep

これで強制的に時刻修正できる それだけ書かれています
逆に -a なしのところが見当たらないので必須 のようではあります

また -a をつけていてもダメな時がありました
詳しい条件はわかってないのですが 修正してわざとずらしてまた修正して を繰り返していると修正されなくなりました

オプション付き makestep とか burst とか関連ありそうなところを見てると閾値とか回数とかいろいろ設定があるようで コマンド実行したら常に強制的に書き換えるのではなく 設定に応じてキャッシュみたいなのが使われる時間があるなど複雑な機能なのかもしれません
マニュアル見てもこの辺りの前提知識がなさすぎて何言ってるのかわからなかったので 解説系ページを探してみたのですが やっぱり chrony 周りは情報が少ないです

適当にマニュアルのサンプルの

# chronyc burst 1/2

をやってもう一度 makestep をしたら時刻が更新されていました
これのおかげなのか 時間が経ったからなのかはわかりません

そういえばこの方法って ntpdate と違って ntp サーバを指定しませんが 設定ファイルに先に記述しておいたものしか使えないのでしょうか

もう date コマンドでいい

なんで時間合わせるだけでこんなに苦労しないといけないのですか!
いろいろ面倒になってきたのでこれでいいやということで 1 秒以内のわずかなズレは起きそうですがこれにしました

# date -s (curl https://ntp-a1.nict.go.jp/cgi-bin/time)

そんなに正確である必要ないですし なんだかんだ楽ですから

やってることは nict のサーバの API から現時点の情報を取得して date コマンドの -s の設定機能で設定してます
ページにアクセスすると取得できるデータは 「Mon May 14 01:13:15 2018 JST」 のようなフォーマットの時刻情報です

一旦適当な日付に設定したあとに 今の時刻になるか確認してみました

root@localhost ~# date -s "04/01 12:12 2018"
2018年 4月 1日 日曜日 12:12:00 JST
root@localhost ~# date
2018年 4月 1日 日曜日 12:12:03 JST
root@localhost ~# date -s (curl https://ntp-a1.nict.go.jp/cgi-bin/time)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 29 100 29 0 0 29 0 0:00:01 --:--:-- 0:00:01 358
2018年 5月 14日 月曜日 01:03:20 JST
root@localhost ~# date
2018年 5月 14日 月曜日 01:03:21 JST

できてますね

date コマンドと curl コマンドだけでいいので追加コマンドのインストールが不要です
それに chrony のよくわからないできたりできなかったりする心配もありません
http でインターネットアクセスできれば ntp のポートが閉じられてるとかそういうことも気にしなくて大丈夫です