ロリポップ!では全てのプランでCronを利用できます。設定数や最短実行間隔の記述はありますが、詳しい制限が分かりません。実行時間制限が、30秒とか5分とか、色々な情報がありますが本当のところはどうなっているのでしょう?
以下のようなコードを実行して確認してみました。単純に経過時間をファイルに書き込みながら、何秒まで処理が続くかを調べています。
$file = __DIR__ .'/log.txt';
if(!file_exists($file)){
touch($file);
}
$timeout = 500;
$begin = time();
$elapse = 0;
$previous = 0;
do{
$elapse = time()-$begin;
if($elapse != $previous){
file _put_ contents($file, $elapse.PHP_EOL, FILE_APPEND);
$previous = $elapse;
}
sleep(1);
}while($elapse <= $timeout);
file _put_ contents($file, 'finish'.PHP_EOL, FILE_APPEND);
タイムアウトを500秒と設定していましたが、300秒を超えたあたりで処理が止まっていました。何度か試してみましたが、全て同じ結果となりました。
結果として、ロリポップ!のCron実行時間の制限は 5分 ということになります。簡単な処理なら十分な時間ですね。
あくまでもロリポプランでの結果なので、ビジネスプランでは結果が変わるかもしれません。
処理時間だけでなく、負荷状態でも制限がかかります。試しにスクリプトから sleepを省いて 高負荷状態で実行してみます。
結果としては、 30~60秒 で処理が終了します。他の負荷状況にも影響されると思うので、毎回この時間とは言い切れませんが、負荷を掛けると短時間で処理を停止させられます。ただ、毎回30秒は超えるため、この範囲に収まれば高負荷な処理も可能かもしれません。
もし、多ループ処理を行うのであれば、sleep等で連続処理されないようにする必要がありそうです。