试图通过PHP文件修改CronJob的

时间:2019-06-13 16:24:38

标签: php cron

我有一个托管平台,在午夜时分,它将在那里添加的所有cronjob重置为15。我们的计划是设置一个每8小时运行一次的脚本,并将其重置回原来的位置,以使它们管理的过程最少地被中断。它是共享托管,但托管公司可以解决它的升级和成本的大幅上涨。

服务器规格为cPanel版本-70.0(内部版本69)| Apache版本-2.4.39 | PHP版本-7.2.18 | MySQL版本-10.2.24-MariaDB-cll-lve |体系结构-x86_64 |操作系统-Linux

我们建议使用名为Crontab的PHP类来实现这一目标。

添加作业时,该作业将出现在服务器的cron作业部分中,但是如果尝试从服务器中删除该作业,则会收到以下错误“在crontab条目中不允许出现新行错误”。我们如何通过Crontab类删除作业。

<?php
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;
        }
    }

}

//$output = shell_exec('crontab -l'); //Check server output
//echo nl2br($output); //Make it readable

Crontab::addJob('*/15 * * * * /opt/alt/php56/usr/bin/php -q /home/path/bob.php process-log >/dev/null 2>&1');
Crontab::removeJob('*/15 * * * * /opt/alt/php56/usr/bin/php -q /home/path/bob.php process-log >/dev/null 2>&1');

?>

这是一个令人担忧的原因,因为要发生服务器错误,然后输入cronjob的代码一定不能正确执行,我听说在Windows服务器上运行类似进程时会出现问题,但是php文件运行了代码位于linux服务器的根目录中,因此没想到会出现问题。

如果有人可以解释为什么会发生此错误以及如何解决该错误,将不胜感激,如果您需要更多信息,请告诉我。

提前加油。

0 个答案:

没有答案