ntpdateコマンド
ntpdateコマンドは、NTPサーバに問い合わせてローカルのシステム・クロックを合わせるためのコマンドです。
多くの場合、ntpdが動いていて、こいつがゆっくりと時刻を合わせてくれるのでこっちの方がよいのですが、偶に激しく時刻がずれたときにはntpdateが便利です。
ntpdateコマンドは標準入力が開いた状態でないとうまく動かない。
だからcronなどから実施する場合には、標準入力が閉じられているのでうまくいかない。
その場合には、以下のようにして無理矢理に標準入力を開いておく
ntpdateコマンドをC言語の中からfork() && exec()することがあるかもしれない。最近、pthread の中からntpdateコマンドをコールしたけど全く動かないという経験をした。
原因は、SIGALRMがマスクされていたため。
pthreadなどでは、勝手にシグナルを受けられると困るので、同期シグナル以外は全てマスクしてしまったりする。すると、このpthreadの中からはntpdateが全く動かないことになります。そのとき、以下のような出力がずっと出ていました。
中々判り難いエラーです。結局以下のようにしました。
多くの場合、ntpdが動いていて、こいつがゆっくりと時刻を合わせてくれるのでこっちの方がよいのですが、偶に激しく時刻がずれたときにはntpdateが便利です。
ntpdate (NTPサーバのホスト名 or IP)
コマンドライン引数
usage: ntpdate [-bBdqsuv] [-a key#] [-e delay] [-k file] [-p samples] [-o version#] [-r rate] [-t timeo] [-U username] server
cronでntpdateを自動実行する場合の注意
ntpdateコマンドは標準入力が開いた状態でないとうまく動かない。
だからcronなどから実施する場合には、標準入力が閉じられているのでうまくいかない。
その場合には、以下のようにして無理矢理に標準入力を開いておく
ntpdate (NTPサーバのIPアドレス) < /dev/zero
ntpdateコマンドとSIGALRM
ntpdateコマンドをC言語の中からfork() && exec()することがあるかもしれない。最近、pthread の中からntpdateコマンドをコールしたけど全く動かないという経験をした。
原因は、SIGALRMがマスクされていたため。
pthreadなどでは、勝手にシグナルを受けられると困るので、同期シグナル以外は全てマスクしてしまったりする。すると、このpthreadの中からはntpdateが全く動かないことになります。そのとき、以下のような出力がずっと出ていました。
Looking for host (NTPサーバのIP) and service ntp host found : (NTPサーバのIP) 25 Mar 23:29:16 ntpdate[16129]: poll(): nfound = 0, error: Address family not supported by protocol 25 Mar 23:30:16 ntpdate[16129]: poll(): nfound = 0, error: No such file or directory 25 Mar 23:31:16 ntpdate[16129]: poll(): nfound = 0, error: No such file or directory 25 Mar 23:32:16 ntpdate[16129]: poll(): nfound = 0, error: No such file or directory
中々判り難いエラーです。結局以下のようにしました。
sigset_t sig_mask; sigfillset(&sig_mask); #ifdef SIGALRM sigdelset(sig_mask, SIGALRM); #endif (void) pthread_sigmask(SIG_SETMASK, &sig_mask, NULL);
2006年03月26日(日) 00:59:54 Modified by hc75ybwf