phpで作成したバッチ処理をwgetを使いcronで自動実行してみた
お恥ずかしい限りなのですが、実は今までcronで何かを自動実行したことがありませんでした。
apacheのログをlogrotate?rotatelog?(どっちだったっけ?)したことはありましたが人の猿真似でしかなく、cronはなんか設定ファイルをゴリゴリ書く必要があるというイメージがなぜかあって、敬遠していました。
この前作った、SEO遊びのためのサイトにもバッチ処理があったのですが、手動で(!)実行していました。もちろん何の考えもなく手動という面倒な方法をとっていたわけではなく、まだ肝となる処理が不安定で、バッチ処理も確実に実行されるという確信がもてなかったので、モニタリングも兼ねて手動にしていました。
しかし今日、妙に複雑だったDB回りから全体的に作り直し、コアとなる処理の安定度が上がった(気がする)ので、バッチ処理も気合をいれてメールでエラーを通知する処理を組み込んだりなんかして、自動実行しようじゃないかという機運が高まってきました。(自分の中で)
ということで、cronを使って定期的にwgetでアクセスすれば自動実行できるんじゃないかと思い、設定してみました。wgetじゃ無くてcli版のphpで実行することも考えたのですが、確かうちのサーバではcli版とweb版でphp.iniの設定が違ってた気がするので、無難にwgetにしました。
サーバはCentOS4なので、実は「1時間毎、日次、週次、月次」に関してcronの設定は終わっています。つまりどういうことかと言うと、上記のタイミングで実行する場合は、特に設定ファイルの作成や変更は必要ありません。日次で処理したければ、実行可能ファイルを/etc/cron.dailyに放り込んでおけばいいだけです。
今回は1時間毎に処理したかったので、wgetの1行だけのシェルスクリプトを/etc/cron.hourlyに放り込んでおきました。内容は以下のとおりです。
#!/bin/sh
wget -p /dev/null http://path.to/batch/file
週次なら/etc/cron.weeklyへ、月次なら/etc/cron.monthlyへ入れておけはOKです。
ということで、無事自動実行されるようになりました。
この程度なら特に設定をする必要もなく、意外と簡単でした。
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.