当前位置:首页 > PHP教程 > php高级应用 > 列表

php5.3下使用php管理crontab计划任务

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-27 11:23:09 浏览: 评论:0 

php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考.

1.使用php-crontab-manager管理计划任务

要求 PHP>=5.3,使用方法举例,代码如下:

  1. use phpmanagercrontabCrontabManager; 
  2. $crontab = new CrontabManager(); 
  3. $crontab->enableOrUpdate('/tmp/my/crontab.txt'); 
  4. $crontab->save(); 

添加一个简单的计划任务,代码如下:

  1. use phpmanagercrontabCrontabManager; 
  2. $crontab = new Ssh2_crontab_manager(); 
  3. $job = $crontab->newJob(); 
  4. $job->on('* * * * *'); 
  5. $job->onMinute('20-30')->doJob("echo foo"); 
  6. $crontab->add($job); 
  7. $job->onMinute('35-40')->doJob("echo bar"); 
  8. $crontab->add($job); 
  9. $crontab->save(); 

php类文件,代码如下:

  1. <?php 
  2.  
  3. Class Ssh2_crontab_manager { 
  4.  
  5.  private $connection
  6.  private $path
  7.  private $handle
  8.  private $cron_file
  9.  
  10.  function __construct($host=NULL, $port=NULL, $username=NULL, $password=NULL) 
  11.  {   
  12.   $path_length  = strrpos(__FILE__"/"); 
  13.   $this->path   = substr(__FILE__, 0, $path_length) . '/';   
  14.   $this->handle  = 'crontab.txt'
  15.   $this->cron_file = "{$this->path}{$this->handle}"
  16.    
  17.   try 
  18.   { 
  19.    if (is_null($host) || is_null($port) || is_null($username) || is_null($password)) throw new Exception("The host, port, username and password arguments must be specified!"); 
  20.    
  21.    $this->connection = @ssh2_connect($host$port);    
  22.    if ( ! $this->connection) throw new Exception("The SSH2 connection could not be established."); 
  23.  
  24.    $authentication = @ssh2_auth_password($this->connection, $username$password); 
  25.    if ( ! $authenticationthrow new Exception("Could not authenticate '{$username}' using pasword: '{$password}'."); 
  26.   } 
  27.   catch (Exception $e
  28.   { 
  29.    $this->error_message($e->getMessage()); 
  30.   } 
  31.  } 
  32.  
  33.  public function exec() 
  34.  { 
  35.   $argument_count = func_num_args(); 
  36.  
  37.   try 
  38.   { 
  39.    if ( ! $argument_countthrow new Exception("There is nothing to exececute, no arguments specified."); 
  40.  
  41.    $arguments = func_get_args(); 
  42.     
  43.    $command_string = ($argument_count > 1) ? implode(" && "$arguments) : $arguments[0]; 
  44.     
  45.    $stream = @ssh2_exec($this->connection, $command_string); 
  46.    if ( ! $streamthrow new Exception("Unable to execute the specified commands: <br />{$command_string}"); 
  47.   } 
  48.   catch (Exception $e
  49.   { 
  50.    $this->error_message($e->getMessage()); 
  51.   } 
  52.  
  53.   return $this
  54.  } 
  55.  
  56.  public function write_to_file($path=NULL, $handle=NULL) 
  57.  { 
  58.   if ( ! $this->crontab_file_exists()) 
  59.   {   
  60.    $this->handle = (is_null($handle)) ? $this->handle : $handle
  61.    $this->path   = (is_null($path))   ? $this->path   : $path;    
  62.    $this->cron_file = "{$this->path}{$this->handle}"
  63.     
  64.    $init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}"
  65.     
  66.    $this->exec($init_cron);   
  67.   } 
  68.  
  69.   return $this;  
  70.  } 
  71.  
  72.  public function remove_file() 
  73.  {   
  74.   if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}");   
  75.   return $this
  76.  } 
  77.  
  78.  public function append_cronjob($cron_jobs=NULL) 
  79.  { 
  80.   if (is_null($cron_jobs)) $this->error_message("Nothing to append!  Please specify a cron job or an array of cron jobs."); 
  81.    
  82.   $append_cronfile = "echo '";   
  83.    
  84.   $append_cronfile .= (is_array($cron_jobs)) ? implode("n"$cron_jobs) : $cron_jobs
  85.    
  86.   $append_cronfile .= "'  >> {$this->cron_file}"
  87.    
  88.   $install_cron = "crontab {$this->cron_file}"
  89.  
  90.   $this->write_to_file()->exec($append_cronfile$install_cron)->remove_file(); 
  91.    
  92.   return $this;   
  93.  } 
  94.  
  95.  public function remove_cronjob($cron_jobs=NULL) 
  96.  {  
  97.   if (is_null($cron_jobs)) $this->error_message("Nothing to remove!  Please specify a cron job or an array of cron jobs."); 
  98.    
  99.   $this->write_to_file(); 
  100.  
  101.   $cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES); 
  102.    
  103.   if (emptyempty($cron_array)) 
  104.   { 
  105.    $this->remove_file()->error_message("Nothing to remove!  The cronTab is already empty.");    
  106.   } 
  107.    
  108.   $original_count = count($cron_array); 
  109.    
  110.   if (is_array($cron_jobs)) 
  111.   { 
  112.    foreach ($cron_jobs as $cron_regex$cron_array = preg_grep($cron_regex$cron_array, PREG_GREP_INVERT); 
  113.   } 
  114.   else 
  115.   { 
  116.    $cron_array = preg_grep($cron_jobs$cron_array, PREG_GREP_INVERT); 
  117.   } 
  118.    
  119.   return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array); 
  120.  } 
  121.  
  122.  public function remove_crontab() 
  123.  { 
  124.   $this->remove_file()->exec("crontab -r");   
  125.   return $this
  126.  } 
  127.  
  128.  private function crontab_file_exists() 
  129.  {//开源代码phpfensi.com 
  130.   return file_exists($this->cron_file); 
  131.  } 
  132.  
  133.  private function error_message($error
  134.  { 
  135.   die("<pre style='color:#EE2711'>ERROR: {$error}</pre>"); 
  136.  } 
  137.  
  138. ?> 

项目地址:https://github.com/MediovskiTechnology/php-crontab-manager

2.Ssh2_crontab_manager 关于php管理计划任务的详细教程

具体内容参考:http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

参考资料:http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs

Tags: php5 3任务 crontab计划任务

分享到: