Gentooにcronを入れる

前置き

数あるcron系ソフトの中から、何となく dcron を選びました。その設定手順です。

本文

インストール

emergeしてちょ。

 # emerge dcron

dcronの起動とrc-update登録も忘れずに。

 # /etc/init.d/dcron start
 # rc-update add dcron default

タスク管理にはcrontabコマンドを使います。dcronがデフォルトのタスク管理テーブル /etc/crontab を生成してくれているので、適用しておきましょう。

 # crontab /etc/crontab

タスク一覧

タスクの登録状況を見てみると、私の環境の場合、こんな感じになっています。

 # crontab -l
 59   *  * * *  rm -f /var/spool/cron/lastrun/cron.hourly
 9    3  * * *  rm -f /var/spool/cron/lastrun/cron.daily
 19   4  * * 6  rm -f /var/spool/cron/lastrun/cron.weekly
 29   5  1 * *  rm -f /var/spool/cron/lastrun/cron.monthly
 */10 *  * * *  test -x /usr/sbin/run-crons && LANG=ja_JP.utf8 /usr/sbin/run-crons
 39   3  * * *  emerge --sync -q >/dev/null

例えば1行目は「毎時59分にcron.hourlyを削除する」、6行目は「毎日3時39分にemerge --sync -qする」という意味です。

タスクのメンテ

タスクを変えたいときもcrontabコマンドを使います(/etc/crontabをエディタで開くのではない)。

 # crontab -e

前述のようなタスク一覧が出るので適当に編集します。emerge --syncの例のように、実行したい時刻(周期)とコマンドを登録して下さい。

さて、既存のタスクの中でも肝心要なのが5行目の「10分おきに、run-cronsを実行する」というやつです。cron系ソフトに共通するスタイルだと思いますが、このタスクのおかげで、例えば/etc/cron.hourlyディレクトリの下に置かれたシェルスクリプトが、1時間おきに実行されます。/etc/cron.dailyや/etc/cron.weeklyなども同様です。

というわけで、タスクを登録する方法は次の2通りになります。

  • emerge --syncの例のように、直接crontabに登録する
  • シェルスクリプトを書いて、/etc/cron.dailyディレクトリなどへ置く

私の環境の場合、例えば以下のようなタスクをシェルスクリプトで運用しています。

  • バックアップ
  • ファイアウォールの再設定
  • ログローテイト
  • DDNSへのIPアドレス更新
  • ログチェック
  • slocateのデータベース更新

タスク実行結果

dcronは、タスク実行時の出力(stdout/stderr)をメールしてくれます。タスクを登録するときは、何事もなく成功した場合はメッセージを出力しないよう、/dev/nullへリダイレクトするなどしておいた方が良いでしょう。

crontabのmanpageを見ると、変数MAILTOを使えばメール送信を無効化したり送信先を変更することが可能なようですが、dcronはこの仕様に非対応のようです(ログを見ると、crontabのパースに失敗してました)。

Last modified:2010/06/18 13:21:15
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.