WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

cronの設定・実行

      2015/05/17

cronとは?

cronとは、決められた時刻にコマンドを定期的に実行させるためのデーモンプロセスです。
cronではコマンドだけにとどまらず、シェルスクリプトや、PerlやPHPなどのインタープリタ言語で書かれたプログラムも動作させることができます。

cronを実行させるためにはcrondが起動している必要があります。

[root@centos ~]#  /etc/rc.d/init.d/crond status    ※crondが起動しているか確認
crond (pid 2559) を実行中...

crondが起動していない場合は下記コマンドで実行します。

[root@centos ~]#  /etc/rc.d/init.d/crond start

cronの設定ファイルの編集

cronの設定ファイルは /etc/crontab です。

[root@centos ~]#  less /etc/crontab    ※設定ファイルの内容を以下に出力
SHELL=/bin/bash    ※/etc/passwordの記述に関係なく、強制的にここで定義されたシェルを使います。
PATH=/sbin:/bin:/usr/sbin:/usr/bin    ※パスの設定です。ここに記述されたディレクトリ内の実行ファイルはパス名を省略して記述することが可能です。
MAILTO=root    ※cronの実行結果をここで指定されたユーザー宛にメールで送ります。ユーザー名を空にするとメールを送信しません。ただし、MAILTOの記述自体をしないと、crontabファイルの所有者にメールを送ります(デフォルトではroot)。
HOME=/    ※crondによりプログラム実行されるときの  カレントディレクトリの指定です

# 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

cronの登録

crontabコマンドでの登録

cronを登録するにはcrontabコマンドに-eオプションをつけて実行します。

“crontab -e”を実行するとエディタが起動してcronの設定ファイルが開きます。
設定ファイルが開いたら、いつ、どのコマンドをどれぐらいの頻度で、何時何分に実行するかを記述していきます。
記述のフォーマットは以下の通りです。

分 時 日 月 曜日 コマンド

分は0~59の数字で指定、
時は0~23の数字で指定、
日は1~31の数字で指定、
月は1~12の数字で指定、
曜日に関しても数字で指定し、0と7が日曜日、1以降は順に、月、火、水、木、金、土となります。
コマンドは設定ファイルでパスを通していないものに関してはフルパスで指定するかカレントディレクトリからの相対パスで指定しなければなりませんのでご注意ください。

[root@centos ~]#  crontab -e    ※実行するとエディタが起動してcronの設定ファイルが開く
01 * * * * hourly-exe    ※毎時1分に"hourly-exe"コマンドを実行
0 3 * * * daily-exe    ※毎日3時ちょうどに"hourly-exe"コマンドを実行
30 4 * * 0 weekly-exe    ※毎週日曜日の4時30分に"weekly-exe"コマンドを実行
45 5 1 * * monthly-exe    ※毎月1日の5時45分に"weekly-exe"コマンドを実行
crontab: installing new crontab    ※保存して閉じるとcron登録が完了した旨のメッセージがでる

このcrontabコマンドで編集したファイルは、/var/spool/cron ディレクトリにユーザ名をファイル名として保存されます。

# ls -l /var/spool/cron
-rw------- 1 root root 172  7月 27 11:00 root

先の例ではrootでcrontabを実行したので、/var/spool/cronディレクトリにrootというファイルが作成されいます。
特定のユーザがcrontabを設定しているかどうかを知りたい場合は、この/var/spool/cronディレクトリを確認するといいと思います。

cron用ディレクトリにスクリプトを置いて実行する

特定のディレクトリにコマンドを保存するだけで、cronとして登録することもできます。

例えば、設定ファイルに”01 * * * * root run-parts /etc/cron.hourly”という記述があります。
これは、”/etc/cron.hourly”ディレクトリに保存したコマンドは、毎時1分に実行されるという意味です。

下記は主なcron用ディレクトリ一覧です。

/etc/cron.hourly 1時間に1回実行
/etc/cron.daily 1日に1回実行
/etc/cron.weekly 1週間に1回実行
/etc/cron.monthly 1ヶ月に1回実行

現在登録されているcronを確認する

現在登録されているcronの一覧を表示するには、下記コマンドを実行します。

[root@centos ~]#  crontab -l

現在登録されているcronを削除する

現在登録されているcronを削除するには、下記コマンドを実行します。

[root@centos ~]#  crontab -r

※`crontab -e`についてはこんな意見も。

crontab -e は「絶対に」使ってはいけない – ろば電子が詰まっている

かいつまんで説明すると、`crontab -r`を実行すると何の警告もなくそのユーザの全てのcron設定が消えてしまう。`crontab -e`はこの危険な-rオプションとタイプミスをする可能性が高いので使うべきではない。

参考資料

 - Linux