当前位置:Gxlcms > PHP教程 > php5.3下使用php管理crontab计划任务_PHP教程

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

时间:2021-07-01 10:21:17 帮助过:27人阅读

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();


类文件

代码如下

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:
{$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($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()
{
return file_exists($this->cron_file);
}

private function error_message($error)
{
die("

ERROR: {$error}
");
}

}

项目地址
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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632893.htmlTechArticlephp5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考。 1.使用php-crontab-manager管理计划任...

人气教程排行