我一直在寻找创建,更改和删除 cron职位的方法通过PHP,但还没有找到办法。我想在Amazon EC2实例中执行此操作。
这可能吗?有什么想法吗?
答案 0 :(得分:3)
EC2没有考虑到这个等式,除了创建文件和调用shell命令之外,PHP与它无关。您需要查看crontab
命令中的手册页。
对您有用的两个命令是:
crontab -l
将当前的crontab转储到stdout crontab newcrontab.txt
将当前的crontab替换为文件newcrontab.txt
当然,这些只会在当前用户的crontab上运行。如果您是root用户,或拥有sudo权限,则可以使用-u username
指定用户。
答案 1 :(得分:2)
我在Yang's Kavoir.com blog上找到了以下课程,而且工作正常。
class Crontab {
static private function stringToArray($jobs = '') {
$array = explode("\r\n", trim($jobs)); // trim() gets rid of the last \r\n
foreach ($array as $key => $item) {
if ($item == '') {
unset($array[$key]);
}
}
return $array;
}
static private function arrayToString($jobs = array()) {
$string = implode("\r\n", $jobs);
return $string;
}
static public function getJobs() {
$output = shell_exec('crontab -l');
return self::stringToArray($output);
}
static public function saveJobs($jobs = array()) {
$output = shell_exec('echo "'.self::arrayToString($jobs).'" | crontab -');
return $output;
}
static public function doesJobExist($job = '') {
$jobs = self::getJobs();
if (in_array($job, $jobs)) {
return true;
} else {
return false;
}
}
static public function addJob($job = '') {
if (self::doesJobExist($job)) {
return false;
} else {
$jobs = self::getJobs();
$jobs[] = $job;
return self::saveJobs($jobs);
}
}
static public function removeJob($job = '') {
if (self::doesJobExist($job)) {
$jobs = self::getJobs();
unset($jobs[array_search($job, $jobs)]);
return self::saveJobs($jobs);
} else {
return false;
}
}
}
添加cron作业:
Crontab::addJob('*/1 * * * * php /var/www/my_site/script.php');
删除cron作业:
Crontab::removeJob('*/1 * * * * php /var/www/my_site/script.php');