Linux 定期自動実行

$ crontab -l

にて現在の自動実行内容を確認できる。

$ crontab -e

にて編集モード

crontabの構文
定期実行の構文は以下の通りです。

# コメント
分 時 日 月 曜日 コマンド
分 分(0-59)、またはワイルドカード「*」を指定する
時 時(0-23)、またはワイルドカード「*」を指定する
日 日(1-31)、またはワイルドカード「*」を指定する
月 月(1-12)、「jan~dec」またはワイルドカード「*」を指定する
曜日 曜日(0-7)、「sun~sat」またはワイルドカード「*」を指定する(0は日曜)
コマンド 実行するコマンドまたはスクリプトを記述する

自社の内容は、
0 6,12,18,22 * * * /usr/local/tools/autoftp6.sh
11 6,10,20 * * * /usr/local/tools/unzip_01kaitsu_all.sh
11 10 * * * /usr/local/tools/unzip_02idou_all.sh
12 6,16,20,22 * * * /usr/local/tools/unzip_03tsuwa_seikyu_all.sh
1 6,12,18,22 * * * /usr/local/tools/unzip_04ritei_error_receive_seikyu_all.sh
1 6,12,18,22 * * * /usr/local/tools/unzip_06himo_error_receive_all.sh
15 10 * * * /usr/local/tools/01_c013111add.sh
15 6 * * * /usr/local/tools/01_K0BIZ311I01add1.sh
15 20 * * * /usr/local/tools/01_K0BIZ311I01add2.sh
15 10 * * * /usr/local/tools/02_c023111add.sh
15 10 * * * /usr/local/tools/02_c033111add.sh
15 10 * * * /usr/local/tools/02_h013111add.sh
15 10 * * * /usr/local/tools/02_K0BIZ311K01add.sh
18 6 * * * /usr/local/tools/02_SS1001311add.sh
0 5 * * * /usr/local/tools/03_c053111add.sh
30 6 8 * * /usr/local/tools/03_c053111add2.sh
30 6 8 * * /usr/local/tools/03_c063111add.sh
30 20 * * * /usr/local/tools/03_c043111add.sh
0 5 3 * * /usr/local/tools/03_c043111add2.sh
30 6 8 * * /usr/local/tools/03_K0BIZ311R01add.sh

toolsの中にスクリプトがあり、それを定期実行している。

LINUX定期自動実行

特定の時間に特定のプログラムやコマンドを実行させるにはCronを使用。
通常Linuxでは直接 /etc/crontabに記入することは推奨されてない。
実際の/etc/crontabの中身は

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

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

これの意味することは、/etc/cron.hourly や /etc/cron.daily フォルダの中にあるスクリプトを定期的に実行。/etc/cron.hourlyなどの中にあるファイルはシェルスクリプトファイルなどで、ひとまとめにして実行される。

■– 文法 –■

crontab (オプション)

   例)
     crontab -e
     定期的にコマンドを自動実行する
       ※▲はスペースを表してます。

■ 説明
crontabコマンドは、定期的にコマンドやプログラムを実行する為に使用します。crontabを使用するには、crontabファイルを編集する必要があります。このファイルでは、コマンドやプログラムを実行する為に必要な細かい設定を行う。また、このcrontabは、スーパーユーザ(root)は常時使用することができるが、一般ユーザについては、「/etc/cron.allow」「/etc/cron.deny」ファイルの有無、設定によって使用できるか、できないかが決まります。

■ オプション
-l      crontabの内容を表示する
-e      crontabを編集する
-u ユーザ名 ユーザ名に指定したcrontabを編集する
-r      crontabを削除する

■ crontabの設定方法

# crontab -e
0 20 * * * /home/pakira/backup.sh
↑毎日20時なるとbackup.shを実行するように設定。

記述方法としては、「0 20 * * *」の左から
分 時間 日 月 曜日
になります。設定できる値としては下記。

分   0-59(毎分は「*」を設定)
時間  0-23(毎時は「*」を設定)
日  1-31(毎日は「*」を設定)
月  1-12(毎月は「*」を設定)
曜日 0-6 (0:Sun to 6:Sat)

複数指定する場合には「,」で区切って値を設定。
例えば、毎日8時と20時にbackup.shを実行するようにするには
0 8,20 * * * /home/pakira/backup.sh
となる。

■ 実行例

▼ crontabの内容を表示する
————————————
# crontab -l
0 8 * * * /home/pakira/backup.sh ←毎日8時にbackup.shを実行
0 12 1 * * /usr/bin/ntpdate -s -b 133.100.9.2
↑毎月1日の12時に133.100.9.2へ時刻合わせ
————————————

▼ crontabを編集する
————————————
# crontab -e

画面が切り替わり、crontabを設定できる。この画面では通常viを使用して編集。
————————————

▼ crontabを削除する
————————————
# crontab -l ←crontabの内容を表示
0 12 1 * * /usr/bin/ntpdate -s -b 133.100.9.2
# crontab -r ←corntabを削除
# crontab -l ←再度、crontabの内容を表示
no crontab for root ←crontabが設定されてないというメッセージが表示
————————————

●実行時間の詳細設定
crontabファイルで、cron コマンドの実行を記述する行は、6つのフィールドで形成されており(システムの crontabファイル(/etc/crontab)は、7つ(分、時、日、月、曜日、ユーザ名、コマンド))、コマンドの実行時間をさまざまな形式で指定することが出来ます。具体的には、以下の通りで、設定可能な値については、(表1)を参照して下さい。

なお、初めてcrontabファイルを編集した場合には、何も書かれていませんので、以下のフォーマットで記述します。また、各フィールドでは、 ‘*’ を使用することが可能です。

分 時 日 月 曜日 コマンド

表1
分 0~59
時 0~23
日 1~31
月 1~12 or jan~dec
曜日 0~7 [0,7は日曜日] or sun~sat
コマンド 有効なコマンドを記述します。空白を含むことも可能ですが、標準のBourne Shellの書式に従って記述します。

また、crontabファイルでは、リストと範囲の指定を行なうことができる。リストとは、一つのフィールドに対して、複数の値を設定することで、範囲とは、一つのフィールドに対して、特定の範囲の値を設定すること。そして、リストと範囲は、一つのフィールドに共存することもできる。さらに、間隔値(指定間隔に一度、処理を実行)を設定することもできる。

表2
設定例 コメント
リスト 0,15,30,45 分フィールドで指定した場合、15分に一度処理を実行します。
範囲 1-5 曜日フィールドで指定した場合、月曜日~金曜日に処理を実行します。
共存 1,3,7-9 時間フィールドで指定した場合、1時、3時、7時、8時、9時に処理を実行します。
間隔値 1-5/2 時間フィールドで指定した場合、1時、3時、5時に処理を実行します。なお、間隔値は、「/」の後ろに指定した値の間隔で処理を実行します。