2. Как мне добавить крон-запись?
4. Как разносить задания cron по времени?
5. Как ограничить время CPU для определенной программы?
6. У меня в админке скрипта пишет, что не отрабатывает крон.
CRON это программа, выполняющая задания по расписанию. Выполняет периодический запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени. Более подробно про использование CRON и команды crontab можно почитать на http://www.codenet.ru/webmast/php/cron.php
Пожалуйста, используйте панель для работы с кроном. Если вы измените крон вручную (через консоль SSH), панель затрет эти изменения. Используйте галочки "подавлять вывод"/"подавлять ошибки", чтобы избавиться от назойливых почтовых сообщений от крон-демона. При их установке стандартный поток вывода и вывод ошибок будут перенаправлены в /dev/null.
Для того, чтобы проверить работу крона, нужно зайти под своим аккаунтом на сервер по ssh и выполнить указываемую в нем команду. Таким образом Вы сможете увидеть ошибки, если они есть.
Если Вы хотите получать на почту уведомления о выполненном кроне, Вы можете задать переменную MAILTO: в меню "Установить переменные крона".
Если у вас возникают трудности с созданием cron-задания, вы можете воспользоваться визардом для создания cron-заданий, выберите меню "Добавить крон визардом".
Для начала определитесь, когда и как часто должно выполняться ваше задание. Затем удерживая нажатой клавишу CTRL выберите желаемые значения в списках. Если вы хотите чтобы задание выполнялось во всех значениях параметров (каждую минуту/час/день/) - выберите в окошках параметры (каждую минуту/час/день). Если вы хотите чтобы крон выполнялся каждый день каждый месяц, то в полях "дни", "месяцы" и "дни недели" можно ничего не выбирать. Если в списках параметров не выбраны значения - крон будет выполняться каждую минуту/час/день/месяц/день недели. После выбора всех необходимых значений, В поле "Команда" укажите выполняемую команду. К примеру:
/usr/local/bin/php /home/firstacc/domain.com/cron.php.
После чего нажмите [ok].
Указывайте полные пути к файлам, например /usr/local/bin/wget вместо wget
Узнать, где находится файл Вы можете командой which, например which wget
Бывает, что на это время на сервере уже назначено слишком много заданий, например:
все процессы запускаются одновременно и им может просто не хватить на всех ресурсов, в этом случае перед командой крона вставьте небольшую задержку, например
Не запускайте 100 крон-заданий в одно и то же время. Лучше равномерно их распределите. Если надо, чтобы крон запускался один или несколько раз в час, делайте это в разные минуты:
11 * * * * command - запустится на одиннадцатой минуте
23,46,9 * * * * command - на 23, 46 и 9 минутах соответственно.
Если есть скрипты, которые надо запускать каждую минуту, распределяйте их напротяжении этой минуты командой задержки sleep
* * * * * sleep 20; command - запустится на 20-й секунде минуты.
Разнесение кронов по времени позволяет снизить нагрузку на сервер.
Поля времени ( * * * * * ):
Используя команду ulimit, например:
разрешит ffmpeg забрать максимум 30 секунд процессора. Ограничивается именно процессорное время, а не общее время, которое процесс может выполняться.
Дополнительно можно запускать с пониженным приоритетом:
где:
20 - это минимальный приоритет;
0 - нормальный приоритет (выставляется по умолчанию)
Одна из возможных ситуаций - крон долго выполняется (или зависает) и запускается другой такой же, в результате чего это задание не отрабатывает. Для избежания таких ситуаций рекомендуется использовать утилиту lockf:
Эта команда справедлива для серверов на базе FreeBSD.
На Linux серверах эта команда выглядит чуть иначе:
halockrun входит в пакет hatools, его нужно устанавливать отдельно через менеджер пакетов Linux.
Также часто возникают проблемы из-за одновременного запуска большого количества заданий cron. В таких случаях, когда нужно часто запускать большое количество кронов, их лучше организовывать в одном скрипте, и при помощи cron вызывать такой скрипт.
Например, есть несколько кронов:
их запуск можно оформить в виде shell скрипта (назовём его 1mincron.sh):
выдать права на выполнение:
тогда задание cron будет выглядеть таким образом:
Помочь организовать выполнение задач cron могут специалисты службы технической поддержки, для этого достаточно написать тикет в панели управления.