Posted at

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法

10年ぐらいまえのコードを見直して改善したコードが下記になります。

10年前はクラスを使わない方法で構築したのだけど、今回はクラスの概念を

使って構築。ここ何年かで自分のコーディングの技術は上がっているかといえば

そうでもないですが、昔よりかは技術の幅は広がっていると思いたいw

※qiita日付は数年前にUPしたのですけど、コード自体は10年前のコードです。

https://qiita.com/taoka_toshiaki/items/30951f6a864821831e32

<?php

//五分置きのクローンを走らせてください。
//php5.6以降推奨? エラーの場合:explodeを見直してください
class cronphp2{

public $set = array(
array("file"=>"/home/tool/test1.php","year"=>"*","month"=>"*","day"=>"*","hour"=>"*","minute"=>"*"),
array("file"=>"/home/tool/test2.php","year"=>"2018","month"=>"7","day"=>"7","hour"=>"*","minute"=>"*/10"),
array("file"=>"/home/tool/test3.php","year"=>"*","month"=>"*","day"=>"7","hour"=>"7","minute"=>"7")
);

function __construct(){
if(is_array($this->set)){
foreach ($this->set as $key => $value) {

if(!$this->chk($value["year"],"year"))continue;
if(!$this->chk($value["month"],"month"))continue;
if(!$this->chk($value["day"],"day"))continue;
if(!$this->chk($value["hour"],"hour"))continue;
if(!$this->chk($value["minute"],"minute"))continue;
if(!$value["file"])continue;
$h = @shell_exec("/usr/local/bin/php -f ",$value["file"]);
print $value["file"];
var_dump($h);

}
}
}

function chk($q1="",$q2=""){

if(!$q1)return false;
if(!$q2)return false;
switch ($q2) {
case "year":
case "month":
case "day":
$ren = array("year"=>"Y","month"=>"n","day"=>"j");
if($q1==="*"){return true;}
if(is_numeric($q1)){
if((int)$q1 == date($ren[$q2])){return true;}
}else{
return false;
}
break;
case "hour":
case "minute":
$ren = array("hour"=>"H","minute"=>"i");
if($q1==="*"){return true;}
if(is_numeric($q1)){
if((int)$q1 == date($ren[$q2])){
return true;
}else{
return false;
}
}else{
if(preg_match("/\*\//",$q1)){
$q = explode("*/",$q1)[1];
if(date($ren[$q2])%(int)$q==0){
return true;
}else{
return false;
}
}
return false;
}
break;
default:
return false;
break;
}

return false;
}
}
$crn = new cronphp2();