我有一个托管平台,在午夜时分,它将在那里添加的所有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服务器的根目录中,因此没想到会出现问题。
如果有人可以解释为什么会发生此错误以及如何解决该错误,将不胜感激,如果您需要更多信息,请告诉我。
提前加油。