用户的crontab只是一个文本文件。运行crontab -e
时,将/var/spool/cron/crontabs/
中的crontab副本复制到/tmp
,然后用文本编辑器打开。保存后,如果进行了更改,则会将临时文件复制回crontabs目录以覆盖用户以前的crontab(如果存在)。
crontab
命令允许您列出内容或启动它以进行手动编辑,但并未明确允许您添加(虽然您已为其创建封装)或从此文件中删除。我会写一个包装,它会为你做,这将需要两个命令行参数:
- 东西,指定你想要做什么;添加或删除。
- 要添加或删除的行。
这将是这个样子:
crontab.php
$cron = '/var/spool/cron/crontabs/' . `echo $USER`;
$action = $argv[1];
$line = array_slice($argv, 2);
if ($action == 'add') {
file_put_contents($cron, $line . "\n", FILE_APPEND);
} elseif ($action == 'del') {
$file = explode("\n", file_get_contents($cron));
unlink($cron);
foreach ($file as $file_line) {
if (trim($file_line) != trim($line)) {
file_put_contents($cron, $file_line . "\n", FILE_APPEND);
}
}
}
你可以像这样运行:
./crontab.php add * * * * curl -s https://ex.example.com/cron/test3.php
这将添加一行:
* * * * curl -s https://ex.example.com/cron/test3.php
...到用户的crontab结尾。以下内容:
./crontab.php add * * * * curl -s https://ex.example.com/cron/test3.php
...将用于删除该行,而不管它在文件中的位置。
请注意,上面的脚本只是一个示例,可以帮助您开始朝某个方向发展。它缺少一些东西,即错误检查:
- 它不验证用户的crontab是否存在。如果用户从未添加过cron作业,则该文件将不存在。你需要检查它是否存在,如果没有,则创建一个新文件。
- 它不验证已设置的参数。例如,第一个参数是“add”或“del”,或者第二个参数存在。您应该验证是否不仅设置了第一个参数,而且它是一个有效的选项,如果不是,则会提供一个用法摘要。对于额外的功劳,您可以检查第二个参数不仅存在,而且是有效的cron格式。
- 您可能想要添加一些输出以告诉用户他们的作业已成功添加或删除。另外,如果他们指定了一个删除不存在的作业,那么告诉他们这样做可能是个好主意,这样他们就不会认为某些东西被删除,而不是因为它实际上并不存在。
你到目前为止尝试过什么?您用于删除PHP中的cron作业的方法将取决于您的系统中如何设置cron作业。 –
我已经使用此代码添加新的cron exec('echo -e“'crontab -l' \ n curl -s https://ex.example.com/cron/test3.php”| crontab - ',$输出); 我想删除一个 – enassr
您的链接无法访问,至少对我而言。堆栈溢出的良好做法是将代码粘贴到问题本身中并对其进行格式化。 –