我做了一些研究和found in a forum,以下消息:
呼叫 「crontab -e命令」 設置爲一個PHP腳本 的EDITOR 環境變量。該腳本可以修改 文件,並在其退出crontab時將 重新讀取並更新文件。
所以,我嘗試了一些,它的工作。我將粘貼下面的工作代碼:
#!/usr/bin/php
<?php
$on = "* * * * * /usr/bin/php /home/user/every_minute_script.php\n";
$off = "# * * * * * /usr/bin/php /home/user/every_minute_script.php\n";
$param = isset($argv[1]) ? $argv[1] : '';
$filename = isset($argv[2]) ? $argv[2] : '';
if ($param == 'activate')
{
shell_exec('export EDITOR="/home/user/cron.php on"; crontab -e');
}
elseif($param == 'deactivate')
{
shell_exec('export EDITOR="/home/user/cron.php off"; crontab -e');
}
elseif(in_array($param, array('on', 'off')))
{
if (!is_writable($filename))
exit();
$crontab = file($filename);
$key = array_search($param == 'on' ? $off : $on, $crontab);
if ($key === false)
exit();
$crontab[$key] = $param == 'on' ? $on : $off;
sleep(1);
file_put_contents($filename, implode('', $crontab));
}
exit();
?>
正因爲如此,我們有一個名爲cron.php
單個腳本位於/home/user
文件夾,設置爲可執行文件(chmod a+x cron.php
)和命令行調用(PHP-CLI) 。後來我會調整它從網絡運行,這是我的意圖。
用法:./cron.php activate
使cronjob和./cron.php deactivate
禁用它。
腳本正確地設置環境變量EDITOR(自身),然後調用crontab -e
,這在其再調用編輯器(也就是現在的相同cron.php腳本)通過臨時crontab文件位置作爲參數。然後,找到並更改正確的crontab行,並保存修改的版本,替換臨時文件。當腳本退出時,crontab將會更新。
這正是我想要的,並符合我的需求。
其他答案很好,可能適合不同的需求和場景,我想感謝每個人的貢獻。
注意:您並未開始/停止作業(您的修改不會影響已經運行的作業),您只需設置它是否會在下次啓動。 – Piskvor
是的。也許有更好的方法來寫這個問題。而不是啓動/停止,也許激活/停用? –
這看起來像http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs – ben