亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP中實現crontab代碼分享

2024-05-04 23:33:24
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP中實現crontab代碼分享,本文給出了實現代碼和使用方法,需要的朋友可以參考下
 

1. 準備一個標準crontab文件 ./crontab

復制代碼代碼如下:

# m h dom mon dow command
* * * * * date > /tmp/cron.date.run

 

2. crontab -e 將此cron.php腳本加入系統cron

 

復制代碼代碼如下:

* * * * * /usr/bin/php cron.php

 

3. cron.php 源碼

 

復制代碼代碼如下:

// 從./crontab讀取cron項,也可以從其他持久存儲(mysql、redis)讀取
$crontab = file('./crontab');
$now = $_SERVER['REQUEST_TIME'];

 

foreach ( $crontab as $cron ) {
 $slices = preg_split("/[/s]+/", $cron, 6);
 if( count($slices) !== 6 ) continue;

 $cmd       = array_pop($slices);
 $cron_time = implode(' ', $slices);
 $next_time = Crontab::parse($cron_time, $now);
 if ( $next_time !== $now ) continue; 

 $pid = pcntl_fork();
 if ($pid == -1) {
  die('could not fork');
 } else if ($pid) {
  // we are the parent
  pcntl_wait($status, WNOHANG); //Protect against Zombie children
 } else {
      // we are the child
  `$cmd`;
  exit;
 }
}

/* https://github.com/jkonieczny/PHP-Crontab */
class Crontab {
   /**
 * Finds next execution time(stamp) parsin crontab syntax,
 * after given starting timestamp (or current time if ommited)
 *
 * @param string $_cron_string:
 *
 * 0 1 2 3 4
 * * * * * *
 * - - - - -
 * | | | | |
 * | | | | +----- day of week (0 - 6) (Sunday=0)
 * | | | +------- month (1 - 12)
 * | | +--------- day of month (1 - 31)
 * | +----------- hour (0 - 23)
 * +------------- min (0 - 59)
 * @param int $_after_timestamp timestamp [default=current timestamp]
 * @return int unix timestamp - next execution time will be greater
 * than given timestamp (defaults to the current timestamp)
 * @throws InvalidArgumentException
 */
    public static function parse($_cron_string,$_after_timestamp=null)
    {
        if(!preg_match('/^((/*(//[0-9]+)?)|[0-9/-/,//]+)/s+((/*(//[0-9]+)?)|[0-9/-/,//]+)/s+((/*(//[0-9]+)?)|[0-9/-/,//]+)/s+((/*(//[0-9]+)?)|[0-9/-/,//]+)/s+((/*(//[0-9]+)?)|[0-9/-/,//]+)$/i',trim($_cron_string))){
            throw new InvalidArgumentException("Invalid cron string: ".$_cron_string);
        }
        if($_after_timestamp && !is_numeric($_after_timestamp)){
            throw new InvalidArgumentException("/$_after_timestamp must be a valid unix timestamp ($_after_timestamp given)");
        }
        $cron = preg_split("/[/s]+/i",trim($_cron_string));
        $start = empty($_after_timestamp)?time():$_after_timestamp;

        $date = array( 'minutes' =>self::_parseCronNumbers($cron[0],0,59),
                            'hours' =>self::_parseCronNumbers($cron[1],0,23),
                            'dom' =>self::_parseCronNumbers($cron[2],1,31),
                            'month' =>self::_parseCronNumbers($cron[3],1,12),
                            'dow' =>self::_parseCronNumbers($cron[4],0,6),
                        );
        // limited to time()+366 - no need to check more than 1year ahead
        for($i=0;$i<=60*60*24*366;$i+=60){
            if( in_array(intval(date('j',$start+$i)),$date['dom']) &&
                in_array(intval(date('n',$start+$i)),$date['month']) &&
                in_array(intval(date('w',$start+$i)),$date['dow']) &&
                in_array(intval(date('G',$start+$i)),$date['hours']) &&
                in_array(intval(date('i',$start+$i)),$date['minutes'])

                ){
                    return $start+$i;
            }
        }
        return null;
    }

    /**
 * get a single cron style notation and parse it into numeric value
 *
 * @param string $s cron string element
 * @param int $min minimum possible value
 * @param int $max maximum possible value
 * @return int parsed number
 */
    protected static function _parseCronNumbers($s,$min,$max)
    {
        $result = array();

        $v = explode(',',$s);
        foreach($v as $vv){
            $vvv = explode('/',$vv);
            $step = empty($vvv[1])?1:$vvv[1];
            $vvvv = explode('-',$vvv[0]);
            $_min = count($vvvv)==2?$vvvv[0]:($vvv[0]=='*'?$min:$vvv[0]);
            $_max = count($vvvv)==2?$vvvv[1]:($vvv[0]=='*'?$max:$vvv[0]);

            for($i=$_min;$i<=$_max;$i+=$step){
                $result[$i]=intval($i);
            }
        }
        ksort($result);
        return $result;
    }
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美理论电影在线播放| 亚洲精品日韩av| 国产精品都在这里| 97国产精品视频人人做人人爱| 亚洲欧美日韩一区二区三区在线| 国产精品视频永久免费播放| 欧美性视频精品| 自拍偷拍亚洲区| 国产精品久久久久久久app| 在线视频欧美性高潮| 岛国av在线不卡| 正在播放国产一区| 国产日韩在线播放| 97视频人免费观看| 成人黄色网免费| 成人精品网站在线观看| 萌白酱国产一区二区| 97视频网站入口| 日韩一区av在线| 中文字幕日韩欧美| 日韩电影大片中文字幕| 岛国av一区二区在线在线观看| 欧美成人免费全部| 国产91精品高潮白浆喷水| 91香蕉国产在线观看| 日本精品久久久久久久| 日韩在线免费av| 日韩av综合网| 欧美国产日本在线| 亚洲白虎美女被爆操| 亚洲一区二区黄| 欧美激情欧美狂野欧美精品| 欧美色图在线视频| 在线播放日韩欧美| 成人日韩在线电影| 2021久久精品国产99国产精品| 久久久久久伊人| 狠狠色香婷婷久久亚洲精品| 777午夜精品福利在线观看| 欧美黑人极品猛少妇色xxxxx| 色青青草原桃花久久综合| 久久精品久久久久久| 国产精品欧美日韩| 热re91久久精品国99热蜜臀| 久久99国产精品久久久久久久久| 国产成人精品一区二区在线| www高清在线视频日韩欧美| 国产精品三级网站| 这里只有精品视频在线| 国产精品第三页| 久久久久久久97| 亚洲国内精品在线| 国产福利视频一区| 亚洲qvod图片区电影| 欧美与欧洲交xxxx免费观看| 国内精品久久久久久久久| 日韩av电影免费观看高清| 国产精品人人做人人爽| 国产精品久久久久国产a级| 97视频在线看| 精品福利在线看| 欧美成人精品三级在线观看| www.亚洲成人| 欧美美女18p| 亚洲电影免费观看高清| 亚洲电影中文字幕| 国产精品久久久久久久久久免费| 中文字幕不卡av| 亚洲精品美女在线观看| 久久精品国产亚洲精品2020| 日av在线播放中文不卡| 国产精品极品美女在线观看免费| 亚洲国产精品国自产拍av秋霞| 92看片淫黄大片欧美看国产片| 97视频在线观看免费高清完整版在线观看| 国产精品久久久久久一区二区| 欧美一级大胆视频| 国产欧美 在线欧美| 亚洲免费小视频| 亚洲女人被黑人巨大进入al| 久久视频国产精品免费视频在线| 国产精品久久综合av爱欲tv| 欧美日韩综合视频网址| 日韩av在线一区二区| 欧美日韩国产一中文字不卡| 91在线色戒在线| 亚洲精品国产精品久久清纯直播| 久久国产精品久久久久| 国产啪精品视频网站| 在线观看不卡av| 成人自拍性视频| 欧美片一区二区三区| 久久久久久这里只有精品| 国产精品久久久久久av福利| 亚洲一级一级97网| 不卡av电影院| 日本久久精品视频| 欧美男插女视频| 欧美在线观看www| 青青精品视频播放| 欧美极品美女视频网站在线观看免费| 深夜成人在线观看| 亚洲在线第一页| 超碰97人人做人人爱少妇| 国产亚洲精品久久| 亚洲国产中文字幕久久网| 欧美成人三级视频网站| 日本免费久久高清视频| 亚洲欧美国产日韩天堂区| 色偷偷88888欧美精品久久久| 久久999免费视频| 疯狂蹂躏欧美一区二区精品| 欧美视频13p| 狠狠综合久久av一区二区小说| 91国产精品电影| 成人国产精品一区二区| 中文字幕在线观看日韩| 最新国产成人av网站网址麻豆| 日韩电影网在线| 色偷偷av亚洲男人的天堂| 茄子视频成人在线| 国产精品视频公开费视频| 91久久精品美女高潮| 国产精品免费在线免费| 狠狠色狠色综合曰曰| 亚洲男人天堂手机在线| 久久精品色欧美aⅴ一区二区| 亚洲精品日韩丝袜精品| 亚洲人成伊人成综合网久久久| 亚洲网址你懂得| 国产精品久久久久一区二区| 亚洲福利视频免费观看| 青青青国产精品一区二区| 欧美性猛交xxxxx水多| 在线看福利67194| 久久久国产精彩视频美女艺术照福利| 亚洲国产精品一区二区三区| 中文字幕精品久久久久| 久久伊人精品视频| 欧美激情一区二区三级高清视频| 午夜美女久久久久爽久久| 在线亚洲男人天堂| 国模极品一区二区三区| 日本高清久久天堂| 亚洲精品色婷婷福利天堂| 国产成人一区二区三区电影| 欧美日韩国产色| 日韩欧中文字幕| 日韩中文在线不卡| 91久久夜色精品国产网站| 日韩欧美国产成人| 久久久久久网址| 宅男66日本亚洲欧美视频| 国产99久久精品一区二区 夜夜躁日日躁| 91精品国产91久久久久| 亚洲欧美999| 日韩精品视频在线观看免费| 欧美精品videosex牲欧美| 九九热精品在线| 亚洲欧美一区二区三区四区| 欧美激情综合亚洲一二区| 国产精品久久久久久久7电影| 精品福利在线观看| 在线免费观看羞羞视频一区二区|