2024/02/13 22:13:39

cron

ジョブ実行デーモン

cron とは

きまった周期でジョブを実行するための仕組みです。
crond というデーモンが、稼動プログラムです。

cron 構成ファイル

cron 周りのファイル/ディレクトリには、以下のようなものがあります。

  • /etc/crontab
    cron を実行するための情報が書かれて
  • /etc/cron.d/
    カスタマイズした crontab 相当のファイルを置いておくところ。
  • /etc/cron.hourly/
    1時間ごとに実行されるジョブの置かれるディレクトリ
  • /etc/cron.daily/
    毎日実行されるジョブの置かれるディレクトリ
  • /etc/cron.weekly/
    毎週実行されるジョブの置かれるディレクトリ
  • /etc/cron.monthly/ 毎月実行されるジョブの置かれるディレクトリ
  • /var/spool/cron/ ユーザごとの crron 設定が置かれる。

crontab

crontab ファイルには、cron を実行するための情報が書かれています。

crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
59 4 * * * root run-parts /etc/cron.daily
5 4 * * 0 root run-parts /etc/cron.weekly
9 4 1 * * root run-parts /etc/cron.monthly
  • SHELL=/bin/bash
    cron が使用するシェルを指定します。
  • PATH=/sbin:/bin:/usr/sbin:/usr/bin
    cron が使用する PATH を指定します。
  • MAILTO=""
    ここで指定したユーザに cron の実行結果をメールします。MAILTO="" とすると、メールしません。MAILTO 行 自体がなければ、crontab ファイルの所有者にメールを送ります(デフォルトはroot)。
  • HOME=/
    cron を使用する際のホームディレクトリを指定します。
  • # run-parts
    行頭に # でコメントが書けます

run-parts

ここに書かれている実行ジョブを編集することはないと思いますが、一応解説。

書式は

分 時 日 月 曜日 実行ユーザ run-parts command

それぞれ半角スペースで区切られます。
全てに該当させる場合は * (アスタリスク)を指定します。

01 * * * * root run-parts /etc/cron.hourly

上記は、全ての曜日、全ての月、全ての日、全ての時刻の 1分に root 権限で /etc/cron.hourly を実行するということです。 この場合、/etc/cron.hourly はディレクトリで、run-parts というオプションでディレクトリ内のシェルを全て実行するという意味になります。

crontab -l

$ crontab -l

cron の設定状況を出力します。

crontab -e

cron 実行するジョブを登録します。
cron 実行するジョブは、crontab -e というコマンドを用いて、ユーザごとの crontab にジョブを追記します。

$ crontab -e

実行したユーザの cron を編集するために、vi が起動します。
crontabファイルの run-parts 以下と同様に1行に1ジョブを記述します。

分 時 日 月 曜日 コマンド

  • 0~59で指定。*(ワイルドカードで全指定)

  • 0~23で指定。*(ワイルドカードで全指定)

  • 1~31で指定。*(ワイルドカードで全指定)

  • 1~12で指定。*(ワイルドカードで全指定)
  • 曜日
    0~7で指定。0,7が日曜日、1が月曜日、6が土曜日。*(ワイルドカードで全指定)
  • コマンド
    指定するコマンドは実行権限が必要

crontab 登録例

5 * * * * foo_command

毎時5分にコマンドを実行します。

0,10,20,30,40,50 * * * * foo_command

10分ごとにコマンドを実行します。

*/10 * * * * foo_command

10分ごとにコマンドを実行します。

0,30 * * * 1-5 foo_command

月曜から金曜は毎時0分と30分にコマンドを実行します。

コマンドは、セミコロンつなぎで複数書くことも出来ます。

*/10 * * * * cd hoge; foo_command;

cron 設定の保存される場所

crontab で設定した cron は /var/spool/cron/USER_NAME というファイルに保存されます。 /var/spool/cron/USER_NAME を直接編集しても、OKです (注: ディストリビューションによってことなることもあるかもしれません)

crontab -r

$ crontab -r

cron の設定を削除します。

-r と -e はキーが隣同士なので、間違うと悲惨です。個人的に以下のようにしています。

# .bashrc
alias crontab='crontab -i'

SEE ALSO

  • $ man cron
  • $ man crontab
サイト内検索