the best place to host your site

F.A.Q. :: Крон


Что такое CRON?

CRON это программа, выполняющая задания по расписанию. Позволяет неоднократный запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени. Более подробно про использование CRON и команды crontab можно почитать на http://www.codenet.ru/webmast/php/cron.php


Как мне добавить крон-запись?

Пожалуйста используйте панель для работы с кроном. Если вы измените крон вручную, панель затрет эти изменения. Используйте галочки "подавлять вывод"/"подавлять ошибки" чтоб избавится от назойливых почтовых сообщений от крон-демона. Они направляют в /dev/null стандартный поток вывода и ошибок. Хотя лучше исправить сами ошибки, если они есть. Вы также можете указать куда форвардить почту от крон-демона в меню "Установить переменные крона".

Если у вас возникают трудности с созданием cron-задания, вы можете воспользоваться визардом для создания cron-заданий, выберите меню "Добавить крон визардом".

Для начала определитесь, когда и как часто должно выполняться ваше задание. Затем удерживая нажатой клавишу CTRL выберите желаемые значения в списках. Если вы хотите чтобы задание выполнялось во всех значениях параметров (каждую минуту/час/день/) - выберите в окошках параметры (каждую минуту/час/день). Если вы хотите чтобы крон выполнялся каждый день каждый месяц, то в полях "дни", "месяцы" и "дни недели" можно ничего не выбирать. Если в списках параметров не выбраны значения - крон будет выполняться каждую минуту/час/день/месяц/день недели. После выбора всех необходимых значений, В поле "Команда" укажите выполняемую команду. К примеру:

/usr/local/bin/php /home/firstacc/domain.com/cron.php.

После чего нажмите [ok].


Не работает крон.

Пишите полные пути к файлам, например /usr/local/bin/wget вместо wget Узнать, где находится файл Вы можете командой whereis, например whereis wget

Бывает что на это время на сервере уже назначено слишком много заданий, например

*/2 * * * * cd /home/acc/domain.com/cgi-bin/fet/secured && /usr/local/bin/php -q /home/acc/domain.com/cgi-bin/fet/secured/mastercron.php

все процессы запускаются одновременно и им может просто не хватить на всех ресурсов в этом случае перед командой крона вставьте небольшую задержку, например

*/2 * * * * sleep 49; cd /home/acc/domain.com/cgi-bin/fet/secured && /usr/local/bin/php -q /home/acc/domain.com/cgi-bin/fet/secured/mastercron.php


Как разносить задания cron по времени?

Не запускайте 100 крон-заданий в одно и то же время. Лучше равномерно их распределите. Если надо чтоб запускалось раз или несколько раз в час - делайте это в разные минуты:
11 * * * * command - запустится на одинадцатой минуте
23,46,9 * * * * command - на 23,46 и 9 минуте соответственно.
Если есть скрипты которые надо запускать каждую минуту - распределяйте их вдоль этой минуты командой задержки sleep
* * * * * sleep 20; command - запустится на 20-й секунде минуты.
Разнесение кронов по времени позволяет снизить нагрузку на сервер.


Как ограничить время CPU для определенной программы?

Используя команду ulimit, например:

sh -c 'ulimit -t 30 && exec /usr/local/bin/ffmpeg агрументы'

разрешит ffmpeg забрать максимум 30 секунд процессора
Ограничивается именно процессорное время, а не общее время, которое процесс может висеть в памяти

Дополнительно можно запускать с пониженным приоритетом:

/usr/bin/nice -n 20 sh -c 'ulimit -t 30 && exec /usr/local/bin/ffmpeg агрументы'

20 это минимальный приоритет, а 0 - нормальный приоритет что выставляется по умолчанию



2007 © Advanced Hosters