Быстрая навигация

FAQ по хостингу »

Крон

1. Что такое CRON?

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

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

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

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

1. Что такое CRON?

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

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

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

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

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

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

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

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

Пишите полные пути к файлам, например /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

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

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

Если есть скрипты которые надо запускать каждую минуту - распределяйте их вдоль этой минуты командой задержки sleep
* * * * * sleep 20; command - запустится на 20-й секунде минуты.

Разнесение кронов по времени позволяет снизить нагрузку на сервер.

5. Как ограничить время 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 - нормальный приоритет (выставляется по умолчанию)