#php #cron
Вопрос:
Я хочу создавать задания cron из PHP, немного как в cPanel или Plesk, но я застрял. Я хочу сделать это программно, а не заставлять пользователя переходить на cPanel для создания крон вручную…..
Много чего перепробовал, много чего прочитал… в том числе и здесь, на stackoverflow, ничего не работает. Я пытаюсь редактировать кронтаб из php, например, shell_exec(‘кронтаб /pathtomycronfile/cron.txt’) а затем редактирует сам файл cron, но это не работает. Пользователь «apache», и я попытался установить кронтаб для apache .. тоже не работает …
Пожалуйста, кто-нибудь может помочь с этим? Вам раньше удавалось создавать задания cron из php?
Ответ №1:
В некоторых системах *nix crontab будет хранить каждый пользовательский cron-файл, например, в /var/spool/cron/crontabs/[ИМЯ ПОЛЬЗОВАТЕЛЯ] . Они не предназначены для непосредственного редактирования, но вы можете заставить PHP сделать это.
Вам также может потребоваться изменить разрешения для содержащего каталога, чтобы PHP мог видеть файл для его редактирования. Затем вы можете сделать это, например, с помощью:
<?php
$user = get_current_user();
$cron_file = fopen("/var/spool/crontabs/$user", "a");
fwrite($cron_file, "n* * * * * touch /tmp/testcronn");
fclose($cron_file);
Хотя, честно говоря, это очень опасно. Вместо этого вам следует подумать о том, чтобы иметь cron.php, который вызывается каждые 15 минут, и изложите всю свою логику о том, какие реальные задачи должны быть выполнены в течение данной четверти часа в этом cron.php. Не редактируйте кронтаб, чтобы поместить туда логику.
Комментарии:
1. Я с Джей-Пи. Вручную добавьте некоторые cron.php в кронтаб и сделайте cron.php инкапсулируйте все необходимые действия.
2. почему это считается опасным? Разве это не то же самое, если я добавляю кроны через cPanel?
3. У вас есть много вопросов, которые вы должны задать себе: можете ли вы гарантировать, что создадите хронограф, который будет таким же надежным и интеллектуальным, как cPanel? Вы можете приложить столько усилий? Можете ли вы гарантировать, что никогда не напишете искаженную строку хрона? Можете ли вы гарантировать, что ваше PHP-приложение в целом не содержит инъекций, что другие люди не смогут добавить работы, если вы сможете? Знаете ли вы все векторы атаки, которые могут возникнуть в результате записи /var/spool/cron/crontab кому-либо, кроме пользователя crontab? Лучше всего прикасаться к cron только через специальные программы, такие как crontab или cPanel.
Ответ №2:
Задания хрона обычно необходимо создавать из панели управления от поставщика хоста. Я не думаю, что есть способ сделать это из программы.
Комментарии:
1. К сожалению, это неприятно слышать 🙁 Вот понимание того, почему я хотел это сделать. У меня есть система, в которой пользователи вводят поставщиков, у которых есть канал данных. Я хочу, чтобы пользователи могли планировать импорт данных от этих поставщиков.