kazmax - Linux で自宅サーバー

cronの設定

呼び方は「クーロン」か、「クローン」と読みます。 「クーロン」が正解と思うのですが、 「クーロンがね、、、」と言ったら、「うちの会社ではクローンと読む!」と言われました。 だまされてるのか?

定期的にスクリプトや、コマンドなどを自動実行する仕組みの事です。 Windows でいったら、タスクスケジューラの事です。 linuxではデフォルトでcronがインストールされているようです。 また、システム起動時に、crond というサービス名で 自動的に起動されるようになっています。

Last Update : 2006年08月26日

cronの設定 手順

設定方法は3つあります。

  1. crontab コマンドを使う
    • cron 設定の書き方
    • cron 設定の確認
    • cron 設定の削除
  2. /etc/crontab ファイルを編集する
  3. 下記のディレクトリにスクリプトを入れておく
    • /etc/cron.hourly
    • /etc/cron.weekly
    • /etc/cron.monthly

1. crontab コマンドを使う

crontab コマンドの使用方法

crontab [ -u ユーザ名 ] { -l( 小文字のL) | -r | -e }
引数の意味( 引数必須です )
引数 説明
-l(小文字のL) 現在の設定を表示する。
-e cron 設定の編集
-r 設定の削除
-u < ユーザ名 > root の時だけ使用可能です。
他のユーザのcrontabの設定をしたり、みたりする時に使用します。
指定しない場合、一般ユーザの場合は、自分の cron の設定となります。

cron 設定の書き方

# crontab -e

とコマンドを入力すると、エディタが開きます。

また、自分が「 root 」の時や、sudo などを使用すれば、 他のユーザの cron の設定もできます。 他のユーザの cron の設定をする場合は、以下の様にコマンドをたたきます。

例: ユーザの名前が hogehoge_user の場合

# crontab -u hogehoge_user -e

設定の書き方ですが、下記の順番に従って、値を入力します。 1行で全部書きましょう。 値と値の間はスペースで区切ります。

分 時 日 月 曜日 コマンド

また、複数設定したい場合は、次の行にいって書いていけばOKです。

設定可能な値の表です。

項目 設定可能な値
1-59
0-23
1-31
1-12
曜日 0-6 ( 日曜日が0となります。 )
コマンド スクリプトなど、実行できるもの。

memo

  • 「 # 」が先頭にあると、その行はコメントとして扱われます。
  • 「 * 」を指定すると、「毎」の意味として解釈されます。
    • 例: 時間のところに「 * 」を指定すると、「毎時」の意味に解釈されます。
  • 「 - 」で数字をつなげると、範囲指定となります。
    • 例: 分のところで、「1-30」の様に書くと、「1分~30分の間」と解釈されます。
  • 「 ,(カンマ) 」で数字を区切る事ができます。
    • 例: 分のところで、「5,15」の様に書くと、「5分と15分に」と解釈されます。
  • 「/数字」と書くことができます。
    • 例: 分のところで、「1-30/5」の様に書くと、「1分~30分の間で、5分おきに」と解釈されます。

cron 設定の確認

# crontab -l
  もしくは、
# crontab -u hogehoge_user -l

memo

ユーザがcrontabで作成した設定は以下にユーザ名で保存されます。
/var/spool/cron/ユーザー名

cron 設定の削除

cron が不要になったら以下のコマンドで設定を削除できます。

# crontab -r

↑全部の設定が削除されます。

他のユーザの設定を削除する場合
例: ユーザの名前が hogehoge_user の場合

# crontab -u hogehoge_user -r

memo

注意!
crontab -r 」を使用すると、複数の設定があっても一気に全て削除されます。
個別に設定を削除したい場合は、
crontab -e 」で編集し直しましょう。

2. /etc/crontab ファイルを編集する

/etc/crontab というファイルを1と同じ書き方で編集します。 設定の削除、変更は直接このファイルを変更しましょう。

3. 下記のディレクトリにスクリプトを入れておく

ディレクトリ 実行間隔
/etc/cron.hourly 1時間に1回
/etc/cron.daily 1日に1回
/etc/cron.weekly 1週間に1回
/etc/cron.monthly 1ヶ月に1回

表のディレクトリにスクリプトを入れておけば、表の規則に従って実行してくれます。

これは、/etc/crontab のファイルに設定されているからです。 /etc/crontab の中身を見てみます。

/etc/crontab

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

crontab の中身をみてみると上の表にあるような設定があらかじめされていると思います。

コマンドは run-partsです。
run-parts というコマンドですが、引数に指定したディレクトリ内のスクリプトを全て実行するというものです。

つまり、デフォルトで上記の様な設定がしてあるので、 各ディレクトリにあるスクリプトを設定通りに実行してくれているだけです。

  • /etc/cron.hourly ならば、毎時1分に、
  • /etc/cron.daily ならば、毎日4時2分に、
  • /etc/cron.weekly ならば、毎週日曜日の4時22分に、
  • /etc/cron.monthly ならば、毎月1日の4時42分に、

run-parts を実行しているだけです。