はじめに
cronはUNIX系OSにおいて、スケジュールを登録しておくことで定期的にジョブを
実行してくれるため、決まったスケジュールや間隔でプログラムを動作させたい
といった際に便利です。
今回は新人にcronの設定を教えることがあったので「crontab」について簡単に記載します。
cronの設定内容を確認する
crontab -l
cronの登録/編集
crontab -e
ユーザーごとにcronの設定が行え、上記コマンドを実行したユーザーの設定ファイルに
スケジュールが登録されます。そのため、プログラム等を実行させる場合は、該当プロ
グラムの実行権限を持っているユーザーで設定を行います。
ユーザーごとの設定ファイルは下記に保存されます。
/var/spool/cron/ユーザー名
cronファイルの記述
* * * * * コマンド
左から、
「分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0-7)※0、7は日曜」
が基本的な形になります。
「*」は省略のため、上記の例では毎分コマンドが実行されます。
- 記述例
カンマ区切り・・ 0,30(分に記載すると0分、30分と30分ごとに実行されます)
間隔指定 ・・ */15(分に記載すると0分、15分、30分、45分と15分ごとに実行されます)
範囲指定 ・・ 1-10(分に記載すると1分から10分まで1分ごとに実行されます)
cronを秒単位で実行したい場合
例:15秒ごとに実行
* * * * * コマンド
* * * * * sleep 15; コマンド
* * * * * sleep 30; コマンド
* * * * * sleep 45; コマンド
sleepを入れて開始時間を遅らせるなど工夫をすれば可能です。
但し、処理によっては前のコマンドが終わる前に次のコマンドが実行されてしまう
場合があるので注意が必要です。
cronでコマンドが動作しないとき
コマンドラインでは実行できるのにcronから実行出来ない場合、環境変数のパスが
通っていないことが考えられます。
下記の方法で必要な環境変数を指定することが出来ます。
crontabに環境変数を記載する(crontab -e)
- cron全体のコマンドに設定する
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/user/bin/
* * * * * コマンド
- コマンドごとに設定する
* * * * * PATH="/sbin:/bin:/usr/sbin:/usr/bin:/home/user/bin/" コマンド
おわりに
cronは定期実行のジョブ登録に便利な機能ですが、
誤った登録をすると思いもよらない間隔で実行されてしまいますので、
設定後はちゃんと動作しているか確認しましょう。