CGIを定時に自動実行する方法

IGU

2010年01月06日 22:31

ブログランキングのサイトを作っている最中、データの収集や記事の投稿、前日のバックアップ等を指定の時間で毎日定期的に実行したい。と思って、調べてみました。

前に試した際は、だいぶ難儀した覚えがありますが、今はとても簡単になってます。
これ、初めての人は参考になると思うので書いておきます。


今回のように定期的に自動作業をさせたい場合、サーバーの「cron」を利用します。

通常は設定ファイルを用意して、時間や実行ファイル名を指定するのですが、最近のサーバーでは、管理画面から簡単に設定できるものが増えています。

僕がメインで使っているレンタルサーバーは「heteml」。ここも、しばらく前から「cron」が無料の標準サービスになりました。(「heteml」は評価が分かれるものの、格安なのが取り柄ですね。)


下が、「heteml」の管理画面の「cron」設定。



このようにフォームに書き込むだけで、後は定期的にCGIが自動で起動してくれます。

超簡単! ビックリです。


注意する点は、CGIは、別な場所で実行されるということ。


今回は、今の時間のファイル名を書き出す簡単なCGI「test.cgi」で実験してみます。

例えば、以下のように「test」というフォルダーの中にCGIを置いて、ブラウザーからアクセスすると、同じ場所に「21****.txt」というファイルが作られます。(左側)
     
これを「cron」で実行すると、ユーザーのルートの場所にファイルが出来てきます。(右側)


なので、最初の「test」フォルダーにファイルを作るには、出力先をフルパスで指定する必要があります。

#my $file = "$hour$min$sec.txt";
my $file = "/home/sites/heteml/users**/*/*/*/****/web/test/$hour$min$sec.txt";
上が通常の書き方(下の書き方でも使えます)。下が「cron」を使う場合の書き方。

これさえ分かれば簡単。

もちろん、CGIにエラーが無いことが条件。「print "";」等もコメントアウトしておきましょう。(エラーメールが届きます)

これだけの作業で、記録ファイルの定期バックアップや、データ収集などのCGIを簡単に定時実行させる事ができます。

便利!


PS:作る人は今日は風邪でダウンです。
頭が回らないので、何も考えずに書けるネタにしておきました。


■2010 05/01追記
※現在、月額263円~の格安サーバー、ロリポップでも、「cron」が使えるようになっています。

■2010 05/01追記
※タスク スケジューラを使った、より簡単な方法の記事を追加しました。
プログラムやCGIを定期的に実行(タスク スケジューラ編)

関連記事