通过PHP管理cron作业

时间:2014-04-23 18:39:53

标签: php cron

我一直在寻找创建更改删除 cron职位的方法通过PHP,但还没有找到办法。我想在Amazon EC2实例中执行此操作。

这可能吗?有什么想法吗?

2 个答案:

答案 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');