cron起動のPHPスクリプト
*cronを使ってPHPスクリプトを定期的に実行したい
実行したいスクリプトに都合のいいユーザになって
cron -e
そうするとviが立ち上がります
用のコマンド「crontab」を使った方が楽だと(私は)思います。
$ crontab -e
とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。viの操作方法は、viを使い倒そう 等を参考にしてください。~
記述する書式は、先ほども書きましたが、
分 時 日 月 曜日 コマンド
です。
分
0~59で指定します。*(ワイルドカード)も使用可能です。
時
0~23で指定します。*(ワイルドカード)も使用可能です。
日
1~31で指定します。*(ワイルドカード)も使用可能です。
月
1~12で指定します。*(ワイルドカード)も使用可能です。また、月の名前の最初の3文字で指定することもできます。jun、julなど。
曜日
0~7で指定します。*(ワイルドカード)も使用可能です。0と7が日曜日で6が土曜日です。また、sun等の名前で指定することもできます。
コマンド
cronが実行するコマンドです。当然実行可能なものでなければいけません。 ~
日付、時間の部分は範囲指定が可能です。例えば1時、2時、3時なら、時間のフィールドに「1,2,3」と書く代わりに「1-3」と書けます。~
また、何分おき(あるいは何時間おき)という場合は「*/」の後に書きます。2時間おきなら「*/2」です。~
「1,4,7,10」は「1-10/3」と書くこともできます。
10分おきに特定のコマンドを実行するには、~
0,10,20,30,40,50 * * * * コマンド
とします。またこれは、~
*/10 * * * * コマンド
と書くこともできます。
注意として、書くフィールドは必ず左側から指定するようにしましょう。例えば、毎日1時にコマンドを実行しようとして
* 1 * * * コマンド
なんて書いてしまうと、毎日1時0分から1時59分まで1分おきにコマンドが実行されてしまいます。こういう場合は
0 1 * * * コマンド
などと「分」の部分も指定しましょう。これで毎日1時0分にコマンドが実行されます。
1時間おきなら、
0 */1 * * * コマンド
としたいところですが、単に
0 * * * * コマンド
でも結果は同じです。~
cronは実行結果をメールで送ってきます。これが邪魔だと思ったら、「MAILTO=」を追加します。~
こうすると全ての実行結果が送られないようになります。~
特定の実行結果のみメールの送信を止めたい場合は、
コマンド > /dev/null 2>&1」
としてください。~
crontab -e でタスクを登録したら、
$ crontab -l
としてちゃんと登録されているか確認しましょう。ついでに
$ crontab -r
とすると全てのタスクが削除されます。
cronは1分おきに設定ファイルを監視しているのでタスクを登録してもcronの再起動をする必要はありません。~
ただし、監視は1分おきなので、「1時34分30秒」に「1時35分」に実行するタスクを登録してもcronは実行してくれません。~
これは「1時35分」に新たなタスクが登録されたとcronが認識するためです。~
もし、タスクが実行されなかったら、ログファイルを眺めてください。ログは「/var/log/cron」に出力されています。~
**今回お題 新着お知らせメールを送信するスクリプトの実行の場合
今回はテストサイト用に設定するのでユーザchimotoで
crontab -e
本番サイトでは毎朝9時に実行するのですが、今回はテストの意味で10分間隔で実行させてみます。~
*/10 * * * * /usr/bin/php -f /home/chimoto/public_html/rengo-aichi/admin/sendmail.php 2>&1 >>/home/chimoto/rengo-aichi_sendmail.log
本番の場合は
0 9 * * * /usr/bin/php -f /home/neo/rengo-aichi/sendmail.php 2>&1 >>/home/neo/rengo-aichi/rengo-aichi_sendmail.log
となるでしょうか~
**スクリプト記述時の注意
includeのパスは必ずフルパスで書かなければいけません。 ここだけ注意が必要です。~
一行目に #!/usr/bin/php とか、PHPのパスも書かなければいけません(ねこ)[2004-07-12]
実行したいスクリプトに都合のいいユーザになって
cron -e
そうするとviが立ち上がります
用のコマンド「crontab」を使った方が楽だと(私は)思います。
$ crontab -e
とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。viの操作方法は、viを使い倒そう 等を参考にしてください。~
記述する書式は、先ほども書きましたが、
分 時 日 月 曜日 コマンド
です。
分
0~59で指定します。*(ワイルドカード)も使用可能です。
時
0~23で指定します。*(ワイルドカード)も使用可能です。
日
1~31で指定します。*(ワイルドカード)も使用可能です。
月
1~12で指定します。*(ワイルドカード)も使用可能です。また、月の名前の最初の3文字で指定することもできます。jun、julなど。
曜日
0~7で指定します。*(ワイルドカード)も使用可能です。0と7が日曜日で6が土曜日です。また、sun等の名前で指定することもできます。
コマンド
cronが実行するコマンドです。当然実行可能なものでなければいけません。 ~
日付、時間の部分は範囲指定が可能です。例えば1時、2時、3時なら、時間のフィールドに「1,2,3」と書く代わりに「1-3」と書けます。~
また、何分おき(あるいは何時間おき)という場合は「*/」の後に書きます。2時間おきなら「*/2」です。~
「1,4,7,10」は「1-10/3」と書くこともできます。
10分おきに特定のコマンドを実行するには、~
0,10,20,30,40,50 * * * * コマンド
とします。またこれは、~
*/10 * * * * コマンド
と書くこともできます。
注意として、書くフィールドは必ず左側から指定するようにしましょう。例えば、毎日1時にコマンドを実行しようとして
* 1 * * * コマンド
なんて書いてしまうと、毎日1時0分から1時59分まで1分おきにコマンドが実行されてしまいます。こういう場合は
0 1 * * * コマンド
などと「分」の部分も指定しましょう。これで毎日1時0分にコマンドが実行されます。
1時間おきなら、
0 */1 * * * コマンド
としたいところですが、単に
0 * * * * コマンド
でも結果は同じです。~
cronは実行結果をメールで送ってきます。これが邪魔だと思ったら、「MAILTO=」を追加します。~
こうすると全ての実行結果が送られないようになります。~
特定の実行結果のみメールの送信を止めたい場合は、
コマンド > /dev/null 2>&1」
としてください。~
crontab -e でタスクを登録したら、
$ crontab -l
としてちゃんと登録されているか確認しましょう。ついでに
$ crontab -r
とすると全てのタスクが削除されます。
cronは1分おきに設定ファイルを監視しているのでタスクを登録してもcronの再起動をする必要はありません。~
ただし、監視は1分おきなので、「1時34分30秒」に「1時35分」に実行するタスクを登録してもcronは実行してくれません。~
これは「1時35分」に新たなタスクが登録されたとcronが認識するためです。~
もし、タスクが実行されなかったら、ログファイルを眺めてください。ログは「/var/log/cron」に出力されています。~
**今回お題 新着お知らせメールを送信するスクリプトの実行の場合
今回はテストサイト用に設定するのでユーザchimotoで
crontab -e
本番サイトでは毎朝9時に実行するのですが、今回はテストの意味で10分間隔で実行させてみます。~
*/10 * * * * /usr/bin/php -f /home/chimoto/public_html/rengo-aichi/admin/sendmail.php 2>&1 >>/home/chimoto/rengo-aichi_sendmail.log
本番の場合は
0 9 * * * /usr/bin/php -f /home/neo/rengo-aichi/sendmail.php 2>&1 >>/home/neo/rengo-aichi/rengo-aichi_sendmail.log
となるでしょうか~
**スクリプト記述時の注意
includeのパスは必ずフルパスで書かなければいけません。 ここだけ注意が必要です。~
一行目に #!/usr/bin/php とか、PHPのパスも書かなければいけません(ねこ)[2004-07-12]
コメント
コメントを投稿