加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php5.3下利用 PHP 来实现 crontab 计划任务的处理

发布时间:2023-07-29 10:16:39 所属栏目:PHP教程 来源:
导读:php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考.

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

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

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

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

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

use phpmanagercrontabCrontabManager; 
$crontab = new CrontabManager(); 
$crontab->enableOrUpdate('/tmp/my/crontab.txt'); 
$crontab->save(); 
添加一个简单的计划任务,代码如下:

use phpmanagercrontabCrontabManager; 
$crontab = new Ssh2_crontab_manager(); 
$job = $crontab->newJob(); 
$job->on('* * * * *'); 
$job->onMinute('20-30')->doJob("echo foo"); 
$crontab->add($job); 
$job->onMinute('35-40')->doJob("echo bar"); 
$crontab->add($job); 
$crontab->save(); 
php类文件,代码如下:

<?php 
 
Class Ssh2_crontab_manager { 
 
 private $connection; 
 private $path; 
 private $handle; 
 private $cron_file; 
 
 function __construct($host=NULL, $port=NULL, $username=NULL, $password=NULL) 
 {   
  $path_length  = strrpos(__FILE__, "/"); 
  $this->path   = substr(__FILE__, 0, $path_length) . '/';   
  $this->handle  = 'crontab.txt'; 
  $this->cron_file = "{$this->path}{$this->handle}"; 
   
  try 
  { 
   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!"); 
   
   $this->connection = @ssh2_connect($host, $port);    
   if ( ! $this->connection) throw new Exception("The SSH2 connection could not be established."); 
 
   $authentication = @ssh2_auth_password($this->connection, $username, $password); 
   if ( ! $authentication) throw new Exception("Could not authenticate '{$username}' using pasword: '{$password}'."); 
  } 
  catch (Exception $e) 
  { 
   $this->error_message($e->getMessage()); 
  } 
 } 
 
 public function exec() 
 { 
  $argument_count = func_num_args(); 
 
  try 
  { 
   if ( ! $argument_count) throw new Exception("There is nothing to exececute, no arguments specified."); 
 
   $arguments = func_get_args(); 
    
   $command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0]; 
    
   $stream = @ssh2_exec($this->connection, $command_string); 
   if ( ! $stream) throw new Exception("Unable to execute the specified commands: <br />{$command_string}"); 
  } 
  catch (Exception $e) 
  { 
   $this->error_message($e->getMessage()); 
  } 
 
  return $this; 
 } 
 
 public function write_to_file($path=NULL, $handle=NULL) 
 { 
  if ( ! $this->crontab_file_exists()) 
  {   
   $this->handle = (is_null($handle)) ? $this->handle : $handle; 
   $this->path   = (is_null($path))   ? $this->path   : $path;    
   $this->cron_file = "{$this->path}{$this->handle}"; 
    
   $init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}"; 
    
   $this->exec($init_cron);   
  } 
 
  return $this;  
 } 
 
 public function remove_file() 
 {   
  if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}");   
  return $this; 
 } 
 
 public function append_cronjob($cron_jobs=NULL) 
 { 
  if (is_null($cron_jobs)) $this->error_message("Nothing to append!  Please specify a cron job or an array of cron jobs."); 
   
  $append_cronfile = "echo '";   
   
  $append_cronfile .= (is_array($cron_jobs)) ? implode("n", $cron_jobs) : $cron_jobs; 
   
  $append_cronfile .= "'  >> {$this->cron_file}"; 
   
  $install_cron = "crontab {$this->cron_file}"; 
 
  $this->write_to_file()->exec($append_cronfile, $install_cron)->remove_file(); 
   
  return $this;   
 } 
 
 public function remove_cronjob($cron_jobs=NULL) 
 {  
  if (is_null($cron_jobs)) $this->error_message("Nothing to remove!  Please specify a cron job or an array of cron jobs."); 
   
  $this->write_to_file(); 
 
  $cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES); 
   
  if (emptyempty($cron_array)) 
  { 
   $this->remove_file()->error_message("Nothing to remove!  The cronTab is already empty.");    
  } 
   
  $original_count = count($cron_array); 
   
  if (is_array($cron_jobs)) 
  { 
   foreach ($cron_jobs as $cron_regex) $cron_array = preg_grep($cron_regex, $cron_array, PREG_GREP_INVERT); 
  } 
  else 
  { 
   $cron_array = preg_grep($cron_jobs, $cron_array, PREG_GREP_INVERT); 
  } 
   
  return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array); 
 } 
 
 public function remove_crontab() 
 { 
  $this->remove_file()->exec("crontab -r");   
  return $this; 
 } 
 
 private function crontab_file_exists() 
 {//开源代码Cuoxin.com 
  return file_exists($this->cron_file); 
 } 
 
 private function error_message($error) 
 { 
  die("<pre style='color:#EE2711'>ERROR: {$error}</pre>"); 
 } 
 

?> 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章