本日の記事は、Webシステムの処理の自動化に大いに役立つ定期処理実行(Cronジョブ)の設定方法について学習していきます。クロン(Cron)とは定期処理の実行を管理する常駐プログラムのことであり、時刻の設定をしておくことで同じ処理を繰り返し実行することができます。
設定を進めるにあたって、AWSのEC2インスタンスを立ち上げ、SSH接続をしてあることが前提となります。そして、Cronジョブのプログラムである cronie をインストールしてあることを前提に解説していきます。また、Linuxの入出力のリダイレクトについての知識も必要になるため、「Apache(アパッチ)サーバのインストールと設定、そしてHTTPS化」と「Linux|標準入力、標準出力、標準エラー、そしてリダイレクトとパイプとは」をまだ学習していない方はそちらを先に読み進めてから本記事に戻ってきてください。


クロンの設定ファイルの場所
設定ファイルはシステム用と各ユーザ用に分かれて存在しています。
【システム用設定ファイル】
システム管理者のルートユーザのみファイルの編集が可能です。
/etc/crontab
【各ユーザ用設定ファイル】
通常はクロンの設定コマンドを使用して間接的に設定ファイルの編集が行われます。
/var/spool/cron/{ユーザ名}
crontabコマンド
クロンの設定ファイルの管理には crontab コマンドを使用します。
【設定ファイルの内容を表示(list)】
crontab -l
【設定ファイルを削除(read)】
crontab -r
【設定ファイルの編集(edit)】
VIMエディターが開いて編集が可能になります。
crontab -e
【rootユーザが他のユーザのcrontabを管理する場合は -u オプションで対象ユーザを指定します】
crontab -u ec2-user -l
crontab -u ec2-user -e
VIM(VI)エディタの使い方の詳細については「Linux|VIMエディタの使い方」の記事を参考にしてください。
クロン(Cron)の設定方法
ここからはクロンの設定方法について解説していきます。
クロンジョブの設定構文
クロンの設定は一定のフォーマットに従って記述する必要があり、1行に1ジョブずつ設定していきます。
分 時 日付 月 曜日 ユーザ名(システム用の場合のみ) コマンド又は実行スクリプト
システム用のクロンジョブの設定の場合のみ実行ユーザの指定が必要です。
月は数値か英語短縮名を指定することもできます。
- 1=1月(jan)
- 2=2月(feb)
- 3=3月(mar)
- 4=4月(apr)
- 5=5月(may)
- 6=6月(jun)
- 7=7月(jul)
- 8=8月(aug)
- 9=9月(sep)
- 10=10月(oct)
- 11=11月(nov)
- 12=12月(dec)
曜日も数値または英語短縮名の指定が可能です。
- 0 又は 7 = 日曜日(sun)
- 1 = 月曜日(mon)
- 2=火曜日(tue)
- 3=水曜日(wed)
- 4=木曜日(thu)
- 5=金曜日(fri)
- 6=土曜日(sat)
クロンジョブの設定例
【毎分実行】
* * * * * echo 'テストです' > /home/ec2-user/crontab.log 2>&1
【0時台は毎分実行】
* 0 * * * /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【毎日18時20分に1回だけ実行】
20 18 * * * /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【毎月7日と22日と毎週火曜日の3時5分に実行】
5 3 7,22 * 2 /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【定時含む10分ごとに実行】(0, 10, 20, 30, 40, 50分)
*/10 * * * * /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【毎日2時間ごと定時に実行】
0 */2 * * * /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【2時から14時までの間だけ2時間ごと定時に実行】(2:00, 4:00, 6:00, 8:00, 10:00, 12:00, 14:00)
0 2-14/2 * * * /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
【1月から3月までの日、月、火曜日で12時から15時台までの間の毎時0分と30分に実行】
0,30 12-15 * jan,feb,mar 0-2 /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
0,30 12-15 * 1,2,3 sun,mon,tue /path/to/script.sh > /home/ec2-user/crontab.log 2>&1
上記の例では定期実行処理結果(正常処理時のメッセージとエラーメッセージも)を crontab.log ファイルに出力しています。
注意事項
設定ファイルの変更後はクロンのデーモンプログラムの再起動の必要はありません。
また、該当するジョブはシステム全体の負荷状況などを加味して実行が開始されるため、必ずしも指定した時刻ピッタリに処理が開始される保証がないことには留意しておきましょう。
まとめ
今回の記事では、AWSのEC2インスタンス上で定期処理実行のクロンジョブの設定方法を学習しました。クロンジョブは繰り返し同じ処理を行う事ができるので、売り上げの集計処理、キャッシュファイルの削除、バックアップ処理、システム監視スクリプトの実行、ディスク使用量の監視なども行えます。設定した後は必ず処理が意図した日時に実行されるかどうかを確認しておきましょう。Webシステムの周辺知識、特にインフラ知識として今後非常に役立ってきます。
コメント