• php 操作linux Crontab ,设定定时任务


    调用别人的类:https://github.com/MediovskiTechnology/php-crontab-manager.git

    自己封装一个类,来实现新增,删除操作,

    一模一样的任务,即时间,任务内容完全相同,那么返回的任务id是一样的,不过这个基本不会出现,同一个任务可以多次添加,但任务id是一样的

    引入了2个文件,

    CrontabManager.php
    CronEntry.php
      1 <?php
      2     /*
      3         Filename: PhpCrontab.php
      4         Comment: php 控制linux crontab 命令
      5         User: lxd
      6         Time: 15/11/13 13:55
      7     */
      8 
      9     class PhpCrontab {
     10         private $_crontab_obj       = null;
     11 
     12 
     13         //构造 引入 是放在同一个目录里面的 
     14         public function __construct() {
     15             set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__);
     16             spl_autoload_register(function($class_name) {
     17                 //需要将引入的文件全部小写
     18                 spl_autoload($class_name,'.php');
     19             });
     20             $this->_crontab_obj    = new CrontabManager();
     21         }
     22 
     23 
     24         /*
     25          * 新增任务
     26          *  @param  id  任务唯一标示符,自己数据库的,方便自己后期处理
     27          *  @param time 任务执行时间
     28          *  @param job  任务具体内容
     29          *
     30          *  @return false | 任务自身的id标志
     31          */
     32         public function addJob($id,$time,$job) {
     33             //新增任务
     34             $job_obj            = $this->_crontab_obj->newJob();
     35             $job_obj->on($time)->addComments(array($id))->doJob($job);
     36             $this->_crontab_obj->add($job_obj);
     37             $this->_crontab_obj->save();
     38             $job_obj            = $time = null;
     39 
     40             //获取任务列表
     41             $job_arr            = $this->getJobList();
     42             //通过$id 找到任务的自身id
     43             foreach($job_arr as $k => $v) {
     44                 //正则匹配
     45                 $pattern        = '/#s[w]+(s|$)/iU';
     46                 $match_info     = array();
     47                 $is_match       = preg_match_all($pattern,$v,$match_info);
     48                 if(!$is_match)
     49                     return false;
     50 
     51                 if(trim($match_info[0][0]) == '# ' . $id)
     52                     return str_replace("
    ",'',$match_info[0][1]);
     53 
     54             }
     55 
     56             return false;
     57         }
     58 
     59 
     60         /*
     61          * 获取任务列表
     62          * @param   void
     63          * @return  array
     64          */
     65         public function getJobList() {
     66             //获取字符串任务列表
     67             $job_str        = $this->_crontab_obj->listJobs();
     68             //解析为数组,返回
     69             return explode("
    
    ",$job_str);
     70         }
     71 
     72         /*
     73          * 清理一条任务
     74          * @param  任务自身的id
     75          * @return true | false
     76          */
     77         public function delJob($jobid) {
     78             //验证是否存在
     79             $is_exists      = $this->_crontab_obj->jobExists($jobid);
     80             if(!$is_exists)
     81                 return false;
     82 
     83             $is_exists      = null;
     84 
     85             $new_jobid      = str_replace('#','',$jobid);
     86             $new_jobid      = str_replace("
    ",'',$new_jobid);
     87 
     88             $del_nums       = $this->_crontab_obj->deleteJob($new_jobid);
              $this->_crontab_obj->save(false);
    89 $new_jobid = null; 90 if($del_nums) 91 return true; 92 return false; 93 } 94 95 96 97 /* 98 * 析构 99 */ 100 public function destruct() { 101 $this->_crontab_obj = null; 102 } 103 104 }

      

    测试调用:

      

     1 require_once('PhpCrontab.php');
     2         $obj        = new PhpCrontab();
     3     
     4         //新增 参数 依次位 id 自己标志的任务id; time 时间; job 任务内容
     5         //$res        = $obj->addJob(1,'* * * * *','date >> /tmp/obj.log');
     6         //var_dump($res);
     7         
     8         //删除,$id 即新增返回的res的值
     9         $id         = '# sgzjiu';
    10         $res        = $obj->delJob($id);
    11         var_dump($res);

     crontabmanage 类,deleteJob 需要更新些内容

     1 function deleteJob($job = null) {
     2         $jobsDeleted = 0;
     3         if (!is_null($job)) {
     4             $data = array();
     5             $oldJobs = explode("
    ", $this->listJobs()); // get the old jobs
     6 
     7             if (is_array($oldJobs)) {
     8                 //放置comment 信息
     9                 $_comment        = '';
    10                 foreach ($oldJobs as $oldJob) {
    11                     if ($oldJob != '') {
    12                         //加入判断,匹配出comment信息
    13                         if(preg_match_all('/^#(.*)/',$oldJob,$match_arr)) {
    14                             $_comment       = $match_arr[0][0];
    15                             continue;
    16                         }
    17 
    18                         if (!preg_match('/' . $job . '/', $oldJob)) {
    19                             $newJob = new CronEntry($oldJob, $this);
    20                             $newJob->lineComment = '';
    21                             //设置comment 信息
    22                             $newJob->comments    = array($_comment);
    23                             $_comment            = '';
    24 
    25                             $data[] = $newJob;
    26                         } else {
    27                             $jobsDeleted++;
    28                         }
    29                     }
    30                 }
    31             }
    32             $this->jobs = $data;
    33         }
    34         return $jobsDeleted;
    35     }
  • 相关阅读:
    php二维数组排序
    重学C语言 -- printf,scanf
    php调试利器 -- xdebug
    composer php依赖管理工具
    现代php开发
    php新特性--持续更新
    2016年书单
    jenkins集成gitlab实现自动合并
    etcd安装
    nginx 日志切割
  • 原文地址:https://www.cnblogs.com/lxdd/p/4962420.html
Copyright © 2020-2023  润新知