スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

日付と時刻の調整…自動で。

前回の続き…

スケジューリングで自動的に仕事をこなしてくれるのはcronという機能だということですが。

とりあえず、この設定ファイルは/etc/crontabにあるようですが、これを直接編集することは推奨されないんだとか(Cronで簡単スケジューリング)。しかしとりあえず見るだけ見てみる。

# less /etc/crontab
(前略)
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

なるほど。よく分からないけれども、/etc/cron.dailyの中身を一日一回やってくれるということか。まあ、時計合わせなど一日一回できれば十分過ぎるほどであると思うので、これを使うことにする。



では実践。上に挙げたページやntpdate を使った時刻合わせ | 自宅サーバー Fedoraなどを参照に、

# cd /etc/cron.daily
# ls

とりあえず、既に設定がなされていたなんてバカな話でないことを確認する。なかったので、

# vi ntpdate

以下の通り記入。

#!/bin/sh
ntpdate ntp.nict.jp

終わったら保存して、

# chmod 755 ntpdate

今つくったファイルに実行権限を与える。



これで一日一回自動で時刻調整をしてくれるであろう。…本当か?さきほどの/etc/crontabの中身によると、午前六時二十五分に実行されることになっている。俺そんな時間にパソコンを起動していないと思うんだけれど…そう、これって二十四時間起動させているサーバのための機能なんじゃないか?

というわけで、もっといいものはないだろうか。起動直後に実行されるとかさ。

Wikipediaのcrontabのページを見てみたら、anacronというものがあるのが分かった(anacron - Wikipedia)。よくわからないけれども、これはパソコンなど、二十四時間起動させっぱなしでないシステムでこのcronを補完してくれる機能であるらしい。

aptで確認するとうちのシステムにもすでにインストールされている(つまりはDebianでデフォルトインストールされていると思われる)ようだったので、とりあえず設定ファイルを覗いてみる。

$ less /etc/anacrontab

すると。

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These replace cron's entries
1 5 cron.daily nice run-parts --report /etc/cron.daily
7 10 cron.weekly nice run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly nice run-parts --report /etc/cron.monthly

となっている。つまり、/etc/cron.dailyの中身は実行してくれるということだろうか。/etc/crontabに直接コマンドを書き込むことが推奨されないというのは、この辺が理由なんだろうか?

しかし、このanacronなるもの自体が自動で起動しないと意味がないよね。デーモンの自動起動を司るのは/etc/rc*.dであるのは以前勉強したので、そこを見てみましょう。

$ cd /etc/rc2.d
$ ls -F
README S20clamav-freshclam@ S20saned@ S89anacron@
S05loadcpufreq@ S20exim4@ S23ntp@ S89cron@
S10rsyslog@ S20kerneloops@ S24dhcdbd@ S99rc.local@
S12acpid@ S20nfs-common@ S24hal@ S99rmnologin@
S12dbus@ S20nvidia-glx@ S26network-manager@ S99stop-bootlogd@
S14avahi-daemon@ S20nvidia-kernel@ S30gdm@
S19cpufrequtils@ S20openbsd-inetd@ S50cups@

あ、いるね。つまり、一応はこのままで問題ないということか。

一応確認のために、あえて軽く時計を狂わせた状態で再起動。で、画面に流れるメッセージを注視しているとanacronを起動するメッセージを発見。起動が完了してgdmが立ち上がった時に時計を確認。すると、あえて狂わせた時計が直っていた。

*ただし、時計をあえて狂わせるにせよ、それを直すにせよ、大幅にやるとシステムを混乱させることになるので(突然スクリーンセーバーが起動するとか、ハイバネートするとか、プログラムの動作に矛盾が生じるとかが考えられますな)、あまりやらない方がいいかも。また、極端な日付に設定すると、2000年問題よろしくシステムがそれに対応出来ずに誤作動を起こすことも指摘されているので(2038年問題 - Wikipedia)、それは知っておいた方がいいでしょう。



なお、今回も標準的なインストールをされたDebianを前提にお話をさせてもらっています。Debian以外のシステムや最小インストールをしたDebianでもこの様にcron・anacronが都合良く設定済みか否かは分かりません。


追記

これをやって以来、起動する度にコンソールに You have new mail などと表示されるようになりました。今まで普段使っているメーラーであるSylpheedに未読メッセージがあってもこんな通知が出たことはなかったので、おそらくは犯人はcronであるわけですが…。

とりあえず /var/ ディレクトリを覗くと、mailというディレクトリが存在しているのを見つける。で、中身を見てみると…どうやらcronの実行したコマンドが返したメッセージはメールとして管理者に通知されるという話であるらしいことが分かりました。

まあ、それはそれはご丁寧に…つっても、その内容がせいぜい時刻調整に成功、何秒ズレていたとかの正直ほとんどどうでもいいことなので、いちいち You have new mail と表示されるのは邪魔くさいなあと思ったんです。そんなとき、こんな記事を発見。 /dev/null - Wikipedia どうやら、結果をこの /dev/null というファイルに書き込むように指示すると一切のメッセージを残さないため、メールにもならないとのこと。つまりさきほどの /etc/cron.daily/ntpdate を

#!/bin/sh
ntpdate ntp.nict.jp > /dev/null

としてやればいいってことでしょうね。

ただ、これだとちゃんと動いてくれているのかも分からなくもなりますが…。エラーも /dev/null に消えちゃいますからね。

関連記事

テーマ : UNIX/Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

ざっぱー

Author:ざっぱー
(この画像について)

当ブログについて
メール
(このメールアドレスへの特定電子メール (迷惑メール) の送信はお断りします)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。