用戶的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
您的鏈接無法訪問,至少對我而言。堆棧溢出的良好做法是將代碼粘貼到問題本身中並對其進行格式化。 –