[Amazon Linux] cronの設定方法・PHPを定期実行する

環境AWS,Linux

やりたいこと : 月火水木金の 14 時にメールを自動送信する

Amazon Linux 上で cron (クーロン)を設定して、定時にPHPで書いたメール送信プログラムを実行することにした

調べると、cron を設定する場所が、crontab だったり /etc/cron.d/ だったり、 crontab は動作しないと書いてあったり。。。 何が正しいのか、最適なのかは分からないけど、今回は /etc/cron.d/ を使う

準備

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

Posted by Agopeanuts