HerokuでSchedulerを使ってPHPで10分おきにサイトにアクセスする

Herokuは無料だけど、1時間位アクセスがないとプロセスがスリープされちゃう。

スリープされたアプリ

スリープされたアプリ(画像下)

そこでSchedulerを使ってアクセスするのが一般的だけど、ググってもほとんどRubyでRakeみたいなことしか書いていないので、PHPでやる方法を調べた。

頻繁に仕様変更してるのか不明だけど、ググって出てくる情報ではタスクが実行されない。

こちらとか http://web-memo-jp.blogspot.jp/2013/01/herokuphplingrbot.html

原因はphpの実行パスとファイルの置き場所。

例では

$ ~/bin/php ~/www/YOURE_FILE_PATH

とあるけど、2014年8月の仕様では

$ php access.php

とターミナルライクな簡単な命令で実行できるようになっている。

ちなみに、自分のaccess.phpの中身はこんな感じ

<?php
$opts = array(
    'http' => array(
        'method' => "GET",
        'header' => "Accept-language: en\r\n"
    )
);
$context = stream_context_create($opts);

$file = file_get_contents('http://APPNAME.herokuapp.com/', false, $context);

?>

file_get_contentsの例文そのまま。

これでスリープされない。

また、

$ php access.php

みたいに実行するとどうなるかは、

$ heroku run php access.php

とすると、Heroku側のターミナルで動かした感じになる。

Advertisements