[Amazon Linux] cronの設定方法・PHPを定期実行する
やりたいこと : 月火水木金の 14 時にメールを自動送信する
Amazon Linux 上で cron (クーロン)を設定して、定時にPHPで書いたメール送信プログラムを実行することにした
調べると、cron を設定する場所が、crontab だったり /etc/cron.d/ だったり、 crontab は動作しないと書いてあったり。。。
何が正しいのか、最適なのかは分からないけど、今回は /etc/cron.d/ を使う
Contents
準備
crond の起動確認
# cron が動いているか確認する
$ /etc/rc.d/init.d/crond status
crond (pid 2919) is running...
# 停止している場合は cron を起動する
$ /etc/rc.d/init.d/crond start
# 2,3,4,5 が ON になっているか確認する
$ chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# crontab の実行権限を確認
$ ls -la /etc/crontab
メール送信用のPHPを作成
/var/www/html/ フォルダ配下に cron というフォルダを作成し、 autoMail.php というファイルを作成実行権限は root にしておく
// 何かしらの処理...
mail('test@hoge.com', 'test', date('Y-m-d H:i:s') . 'テストメール');
cron設定
/etc/cron.d/ フォルダの中に、 auto というファイルを作成
$ sudo vi /etc/cron.d/auto
#!/usr/bin/php
0 14 * * 1-5 root php /var/www/html/cron/autoMail.php
*パーミッションは 644
cronは、crontab や cron.d ファイルを 1 分おきにチェックする
これで 14 時にメールが届く
cron のログを確認
$ sudo tail -f /var/log/cron
CROND[14326]: (root) CMD (php /var/www/html/cron/autoMail.php)
cron.d ファイルの記述方法
書式
分 時 日 月 曜日 [実行ユーザ] [実行コマンド]
分 時 日 月 曜日で、特に指定のないところには「*」を書く
crontab の書式とは異なり、cron.d では実行ユーザを指定する
スケジュールの記述方法
スケジュールの書き方は crontab と同じ
分 | 0~59 |
時 | 0~23 |
日 | 1~31 |
月 | 1~12 または jan~dec |
曜日 | 0~7 または sun~sat (0:日、1:月、2:火、3:水、4:木、5:金、6:土、7:日) |
実行時間の指定方法
リスト
数値を「,」で繋げると複数指定が可能
# 毎日、毎時間、0,10,20分に実行
0,10,20 * * * * command
※ リストは、月や曜日の設定可能な値にある名前(日月火とかjanなど)での指定はできない
範囲
数値をハイフン「-」で繋げると範囲指定が可能
# 6〜12 月の 1 日の 21:00, 22:00, 23:00 に実行
0 21-23 1 6-12 * command
※ 範囲では、月や曜日の設定可能な値にある名前(日月火とか jan など)での指定はできない
間隔
時間と間隔を「/」で繋げると時間間隔を指定できる
# 毎時、1分、6分、11分、……、56分に実行
1-56/5 * * * * command
# 5分ごとに実行
*/5 * * * * command
※ 「*」は毎回(毎時、毎分など)という意味で、この場合 0 分開始となる( 0-59/5 と同じ)
共存
実行時間を複数の指定方法で書くことができる
# 毎月、1,5,15,16,17,18,19,20日の4:20に実行
20 4 1,5,15-20 * * command