【问题标题】:Deleting individual cron jobs using PHP使用 PHP 删除单个 cron 作业
【发布时间】:2013-03-27 16:21:14
【问题描述】:

我有一个 php 脚本,一旦将一些数据插入 SQL 数据库,它就会设置一个 cron 作业:

<?
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * /usr/local/bin/php /home/dldl1330/public_html/new/mailchimp.php'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
?>

这个 cron 作业执行另一个脚本,将 SQL DB 与 mailchimp 同步。在这个 mailchimp php 脚本中,它删除了 cron 选项卡:

echo exec('crontab -r');

一旦发生这种情况,我会丢失我的 cron 选项卡中的所有作业(并且它会删除在每个 cron 作业之后通过电子邮件发送的电子邮件),我怎样才能使上面的行只删除 /home/dldl1330/public_html/new/mailchimp.php cron 作业?

【问题讨论】:

  • 您可以尝试逐行读取整个 crontab 并匹配正确的脚本,将其删除并将新内容写回 crontab。
  • 你可以像现在一样'写'它,除非你得到它的内容,只需匹配并删除你想要消失的选项卡,然后将它写回 cron 选项卡
  • 所以我可以使用以下命令获取 crontab 的内容: $output = shell_exec('/usr/bin/crontab -l');回声“
    $输出
    ”;而且我知道我需要删除这一行 - * * * * * /usr/local/bin/php /home/dldl1330/public_html/new/mailchimp.php 那我该怎么做呢?

标签: php crontab


【解决方案1】:

我使用了上面的建议并想出了一个解决方案,我不确定它的效率或正确性....欢迎 cmets。

注意://查找字符串部分只是为了我的调试/学习目的

<?php
//get contents of cron tab
$output = shell_exec('crontab -l');
echo "<pre>$output</pre>";

//Find string
$cronjob = ('* * * * * /usr/local/bin/php /home/dldl1330/public_html/new/mailchimp.php');
if (strstr($output, $cronjob)) {
   echo 'found';
} else {
   echo 'not found';
}

//Copy cron tab and remove string
$newcron = str_replace($cronjob,"",$output);
echo "<pre>$newcron</pre>";

file_put_contents('/tmp/crontab.txt', $newcron.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');

?>

【讨论】:

  • 似乎是最好的解决方案。我一直在网上四处寻找,简单地结束所有 crons 并重新开始一个新的列表是最有意义的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多