crontabはリポジトリで管理

crontabの管理についてリポジトリで管理せよという技を見つけました。確かにeとrはキーボード上隣同士ですからね。ミスったことは無いのですが考えてみると怖い話です。

因みに

crontab -l > ~/var/crontab.back

には目からウロコ。これなら誤って削除してしまっても大丈夫ですね。でも複数人でcrontabを操作してたりすると誰が何のために設定したバッチか不明なものが氾濫したりいろいろと管理上大変なので最終的にはリポジトリ管理にしたいですね。

恐怖のcrontab -r. 設定ファイルはレポジトリ管理せよ – Slow Dance
http://d.hatena.ne.jp/LukeSilvia/20080621/p1

Crontabを編集

昨日のntpの件があるので今日はcrontabを編集。
普通は使用するユーザーでcrontab -eで編集。ちなみに現在登録されている内容を見るのはcrontab -l

# crontab -e

下記のように追加して
0 * * * * /usr/sbin/ntpdate ntp.nict.jp

# crontab -l

# DO NOT EDIT THIS FILE – edit the master and reinstall.
# (/tmp/crontab installed on Tue Nov 29 21:14:30 2005)
# (Cron version — $FreeBSD: src/usr.sbin/cron/crontab/crontab.c,v 1.22 2004/09/14 19:01:19 dds Exp $)
0 * * * * /usr/sbin/ntpdate ntp.nict.jp

こんな風にファイルができます。
出来たファイルは/var/cron/tabs/rootです。rootの部分は作成したユーザーです。
これはFreeBSDの場合ですが、Redhatだと/var/spool/cron/rootという風に保存されるディレクトリが違います。

また、システムで使用するcrontabは/etc/crontabです。
とりあえず出力

# /etc/crontab – root’s crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
HOME=/var/log
#
#minute hour mday month wday who command
#
*/5 * * * * root /usr/libexec/atrun
#
# Save some entropy so that /dev/random can re-seed on boot.
*/11 * * * * operator /usr/libexec/save-entropy
#
# Rotate log files every hour, if necessary.
0 * * * * root newsyslog
#
# Perform daily/weekly/monthly maintenance.
1 3 * * * root periodic daily
15 4 * * 6 root periodic weekly
30 5 1 * * root periodic monthly
#
# Adjust the time zone if the CMOS clock keeps local time, as opposed to
# UTC time. See adjkerntz(8) for details.
1,31 0-5 * * * root adjkerntz -a

見たかぎりlinuxと同じような構成の部分がありますね。daily,weekly,monthlyの部分がBSDではperiodicを使い、/etc/periodic/以下にdaily,weekly,monthlyのディレクトリがあってその中にスクリプトを置いています。redhat linuxの場合は/etc/の下にcron.daily, cron.weekly, cron.monthlyとディレクトリがあってその中にスクリプトが入っています。

2013-03-14追記:
NTPサーバを福岡大学からNICTに変更しました。