好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php5.3下使用php管理crontab计划任务 - php高级应用

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

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

1.使用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  ( empty empty ( $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()   { //开源代码phpfensi测试数据      return   file_exists ( $this ->cron_file);   }      private   function  error_message( $error )   {     die ( "<pre style='color:#EE2711'>ERROR: {$error}</pre>" );   }    }  ?> 

项目地址:https://github测试数据/MediovskiTechnology/php-crontab-manager

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

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

参考资料:http://stackoverflow测试数据/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs

查看更多关于php5.3下使用php管理crontab计划任务 - php高级应用的详细内容...

  阅读:40次