定期的に行う必要のある作業は crontab を使えば忘れることがありません。
crontab のシンタックスとオプション
crontab [ filename ]
crontab [-elr] [username]
-e | crontabを編集する。環境変数EDITORで指定したエディタで編集する。EDITORがセットされていなければ ed(1)を使用する。* |
-l | crontabの内容を表示する |
-r | crontab ディレクトリからユーザーの crontab を削除する |
linux には特定のユーザを指定する -u オプションがありますが、solaris にはありません。
username 指定は root だけができますが、su - で username になってから操作した方が安全です。
* ed はさすがに辛いのでせめて vi ぐらいにしておきましょう。
アクセス制御
アクセス制御は説明するとごちゃごちゃしてしまうのでやめておきますが、solaris2.X 以前と solaris8 以降では大きく異なります。
伊東四郎曰く、「できるものはできる!」
solaris2.X 以前 |
/etc/cron.d/cron.allow と /etc/cron.d/cron.deny による制御 |
solaris8 以降 |
Role-Based Access Controlによる制御 |
crontab の記述形式
crontab は空白またはタブで区切られた6つのフィールドから成ります。
最初の5つが起動時刻に関するもの、最後の1つが実行するプログラムです。
#で始まる行はコメント行です。
分 (0-59)
時 (0-23)
日 (1-31)
月 (1-12)
曜日 (0-6、0 は日曜日)
私のcrontabを公開します
me[167]% crontab -l
# 毎週火曜日の12:10にback up用のテープをチェックしろ!とメールします。
10 12 * * 2 mailx -s"Check the backup tape" me@mydomain < $HOME/message.jis
# 毎日5:00 に CGI で使用したテンポラリファイルを削除します。
# del_oldfile.plは指定したディレクトリ配下で N 日以上前に作成されたファイルを
# 削除する自作スクリプトです。
0 5 * * * $HOME/cron_script/del_oldfile.pl $HOME/public_html/cgi-bin/tmpoutdir 2
# 月曜日の 1:00に SWISS-PROTをミラーします。
0 1 * * 1 /work/DB/tools/mirror/swiss_update
# 日曜日の 1:00に PIRをミラーします。
0 1 * * 0 /work/DB/tools/mirror/pir_update
|
rootの crontab は以下のようなものを入れてます。
10 3 * * 0,4 /etc/cron.d/logchecker
10 3 * * 0 /usr/lib/newsyslog
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
10 0 * * * /usr/local/apache/cron_script/http_log_check
# スプールに貯まった一時ファイルの削除
0 0 * * * find /var/spool/samba -atime +1 -exec rm {} \;
# ntp で時間合わせ
0 1 * * * /usr/sbin/ntpdate ntp1.mydomain > /dev/null 2>&1
|
crontabの記述に関する小ネタ
標準出力、標準エラー出力のリダイレクト
起動日の工夫
croontabの記述形式でも説明しましたが、crontabでは毎週のある曜日や、月のうちの何日という指定はできますが、第1月曜というような指定はできません。
毎月第4金曜日にだけ、ダウンロードしたいデータがあるので、金曜日に実行するダウンロード用スクリプトに以下のようなスクリプトを組み込んでいます。
(perlスクリプトです。念のため。)
$mday = (localtime time)[3];
$w = int(($mday-1)/7)+1;
if( $w != 4 ) { exit; }
|