年中アイス

いろいろつらつら

cronによる定期実行

実はcronという言葉は聞いた事はあったんだけど、定期実行させられるもの以上に、実際にcronがどんなものかっていうのは、知らないままでした。調べたら案外簡単かつ便利なので、備忘録がてら。

ある処理を定期的に実行させる場合にcronが利用できます。crontabというコマンドを使って登録します。
実際には登録と言うよりは、テキストに直接定期実行させるコマンドを書いていく形になります。

  • crontabコマンド
crontab [-u ユーザ名] オプション

-u ユーザ名をつけると、指定したユーザのcronを扱います。省略すると、実行したユーザのcronを扱います。

オプション 内容
e 登録。テキスト編集画面に入ります。保存すると自動で定期実行登録されます。
l 参照。catのように登録内容を参照できます。
r 削除。crontabのファイル自体を消してしまうので、本当に全部消すときだけ。
  • 定期実行の書き方例
#結果を送信するユーザ、またはメールアドレス
#省略するとcrontabの所有ユーザアカウントにメールが飛ぶ
MAILTO="メールアドレス1,メールアドレス2"

#分 時 日 月 曜日 定期実行させるコマンド
#毎日10:00にhoge.shを実行する
0 10 * * * /home/reiki/hoge.sh

#,を使うと列挙できる
#毎時0分と30分にドライブの利用情報を記録する(メールで受け取る)
0,30 * * * * df

#曜日の区分値は0〜7で0,7は日曜日
#毎週金曜日の18:00にリマインドメッセージを送る
00 18 * * 5 echo "早く帰れ!"

他にも検索すると書き方は色々でてきます。
このコマンドが実行されたときの標準出力、標準エラー出力は、crontabのユーザにメールで飛びます。メールの本文にそのまま出力された内容が入る形です。

シェルなどを実行する場合、実行パスは所有ユーザのホームディレクトリになります。シェル内で相対参照している場合など、うっかりすると別の場所をさす場合があるので注意が必要です。

定期的なレポート送信のような形で使うもよし、エラー時のみ出力するシェルなどを作って、監視に利用するもよし。運用やバッチなどにからむとよく使いそうです。