/dev/null に消える前に…

記憶から消える前に備忘録。

ntpdateで時刻合わせ

ntpdateによる時刻合わせの備忘録


参考サイト

ntpdateの設定

オプション

ntpdate(8) manページサーバーの時刻合わせコマンド、ntpdateはどのサーバーを参照すべき?:ネットワーク管理の基本Tips - @ITによると, ntpdateの時刻合わせには2種類ある.

オプション モード 備考
-B slewモード 徐々に微調整して時刻を合わせる
-b stepモード 一気に(強制的に)時刻を合わせる

1日中稼働するサーバで時刻合わせを行うのであれば,slewモードでの時刻を考えるとよいだろう. 他のオプションについては現状使う予定はないので省略する.

ntpサーバ

プロバイダなどからntpサーバを提供されていなければ,国内の利用可能な公開ntpサーバを用いるとよい. 公開ntpサーバのうち,NTP/推奨公開サーバ - wiki@nothingに載っているものを利用するとよいだろう.

ntpdateではntpサーバを複数指定することができる. 例えば,

$ sudo ntpdate -B ntp.nict.jp jp.pool.ntp.org ntp.jst.mfeed.ad.jp

もしくは,root権限から

# ntpdate -B ntp.nict.jp jp.pool.ntp.org ntp.jst.mfeed.ad.jp

のようにntpdate [オプション -B など] ntpサーバ1 ntpサーバ2 ntpサーバ3 ...の形で指定する. (ntpdateによる時刻合わせではroot権限が必要なのでsudoもしくはroot権限からの実行が必要となる.)

crontabの利用

24時間稼働のサーバでは定期的に自動で時刻合わせしてくれると助かるだろう. そこで,crontabを利用する.

詳しい書き方,設定の仕方についてはcrontabの書き方 | server-memo.netを参考にするとよいだろう.

crontabのオプション

オプション 備考
-e crontabの設定編集
-l crontabの設定表示
-r crontabの設定削除

crontabはユーザごとに設定できて,表のオプションと合わせてcrontab (-u ユーザ名) [-e, -l, -r]と実行できる. -rオプションで誤って設定を削除してしまうのは非常に危険なので実行時には慎重に… というのが面倒な場合には,別ファイル(例えばmycronというファイル)に設定を書いておき crontab (-u ユーザ名) mycronとしてもcrontabに設定を反映できる. このとき,設定の確認はcrontab (-u ユーザ名) -lで確認するよりも, catコマンドなどでmycronファイルを確認した方が-rオプションの誤消去を防ぐことができるだろう.

crontabの設定

crontabは以下のように書く.

[分] [時] [日] [月] [曜日(0,1,...,7)] [実行したいコマンド]
項目
0から59までの数値
0から23までの数値
1から31までの数値*1
1から12までの数値
曜日 0から7までの数値*2

*1 例えば,31日がない月に31を設定しても実行されない.
*2 日:0 または 7,月:1,火:2,水:3,木:4,金:5,土:6と指定する.

また,任意の値を設定する際には "*" を用いる.

例えば,毎日0:00にコマンドを実行する場合は

0 0 * * * [コマンド]

と書く.

何分おき,何時間おきのような実行も設定できるが省略する.

以上から,例えば毎日0:05にslewモードで時刻合わせする設定はrootのcrontabに以下のように書けばよい.

5 0 * * * ntpdate -B ntp.nict.jp jp.pool.ntp.org ntp.jst.mfeed.ad.jp