tôi đã làm một số nghiên cứu và found in a forum, được thông báo sau:
Call "crontab -e" với các biến môi trường EDITOR thiết lập để một php kịch bản. Tập lệnh đó có thể sửa đổi tệp và khi nó thoát crontab sẽ đọc lại tệp và cập nhật.
Vì vậy, tôi đã thử một số thứ và hoạt động.Tôi sẽ dán mã làm việc dưới đây:
#!/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();
?>
Vì nó là, chúng tôi có một kịch bản duy nhất có tên cron.php
tọa lạc tại /home/user
thư mục, thiết lập để được thực thi (chmod a+x cron.php
) và gọi từ dòng lệnh (PHP-CLI) . Sau đó tôi sẽ tinh chỉnh nó để chạy từ web, đó là ý định của tôi.
Cách sử dụng: ./cron.php activate
để bật cronjob và ./cron.php deactivate
để tắt tính năng này.
Tập lệnh đặt biến môi trường EDITOR (chính nó) và sau đó gọi crontab -e
, lần lượt gọi EDITOR (hiện là cùng một tập lệnh cron.php) chuyển vị trí tệp crontab tạm thời làm đối số. Sau đó, dòng crontab thích hợp được tìm thấy và thay đổi, và phiên bản sửa đổi được lưu, thay thế tệp tạm thời. Khi tập lệnh thoát, crontab sẽ cập nhật.
Điều này thực hiện chính xác những gì tôi muốn và phù hợp với nhu cầu của tôi.
Các câu trả lời khác là tốt đẹp và có thể phù hợp với các nhu cầu và kịch bản khác nhau và tôi muốn cảm ơn tất cả những người đã đóng góp.
Nguồn
2011-07-01 17:08:26
Lưu ý: bạn không bắt đầu/dừng công việc (sửa đổi của bạn không ảnh hưởng đến các công việc đang chạy), bạn chỉ cần thiết lập cho dù nó sẽ bắt đầu thời gian tới hay không. – Piskvor
Có. Có lẽ có một cách tốt hơn để viết câu hỏi này. Thay vì bắt đầu/dừng, có thể kích hoạt/hủy kích hoạt? –
hình thức này giống như một bản sao của http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs – ben