В Unix-подобных ОС существует возможность запускать программы пользователя в указанное им время. Для этого используется планировщик задач cron, который получает инструкции от пользователей и производит выполнение любых задач по полученным сценариям. Наши клиенты могут пользоваться данной возможностью для выполнения периодических задач.
- Как настроить cron средствами панели ISPmanager 6
- Как настроить cron по ssh
- Как запустить PHP-скрипт по расписанию
- Как получить сообщения об ошибках от программ, запускаемых cron
- Как запустить сценарий от имени пользователя
- Ограничения
Как настроить cron средствами панели ISPmanager 6
Настраивайте cron-сценарии через панель управления в разделе Планировщик CRON:
Чтобы добавить новые задания, нажмите Создать задание. Откроется интерактивный редактор cron-сценариев:
В поле Команда укажите полный путь до скрипта или команду, которая должна выполняться (для системных команд полный путь можно не указывать). Например, полный путь до файла script.pl, размещенного в корне площадки, будет выглядеть так:
/var/www/u12345/data/www/script.pl
Убедитесь, что файл, который нужно запустить, имеет права на чтение+исполнение (r+x) для владельца файла. Поменять права на нужные можно командой:
chmod 750 script.pl
В поле Описание вы можете сделать пометку, чтобы не забыть что выполняет данный сценарий
Далее выберите периодичность, с которой будет запускаться Ваш сценарий. Есть два варианта настройки — базовый и экспертный.
Базовый — вы выбираете один из перечисленных вариантов в строке Выполнить: каждый час, ежедневно, еженедельно, ежемесячно, ежегодно, при запуске.
Экспертный — гибкая настройка периодичности запуска: минуты, часы, дни месяцев, месяцы, дни недели (0 - воскресенье). Формат ввода: * - все минуты; */n - каждые n минут; n - с началом минуты n; a,b,c-e - с началом минут a,b,c,d,e
Примеры базового режима настройки периодичности запуска:
- выполнять задание по понедельникам в 1 час 15 минут ночи
- выполнять задание 5 апреля в 0 часов 1 минуту каждый год
Примеры экспертного режима настройки периодичности запуска:
- выполнять задание раз в час в 05 минут
- выполнять задание по понедельникам в 1 час 15 минут ночи
- выполнять задание 5 апреля в 0 часов 1 минуту каждый год
Когда все поля будут заполнены (кроме поля Описание, оно необязательное), нажмите Создать.
Отправка отчетов на email о выполнении сценария
Для настройки уведомлений укажите email, на который будут приходить уведомления о выполнении сценария. Для этого перейдите в раздел Планировщик CRON.
Нажмите на кнопку «Настройки» и в поле «Адрес e-mail» укажите email, на который необходимо отправлять уведомления о выполнении сценариев.
В настройках сценария убедитесь, что не стоит галочка напротив поля Не отправлять отчет по e-mail.
Как настроить cron по ssh
Конфигурирование сценариев cron производится через unix shell. Определите, какие программы нужно запустить, и узнайте полные пути к ним на диске сервера. Для этого перейдите с помощью команды cd в каталог, где находится запускаемая программа, и узнайте полный путь к этому каталогу командой pwd. Путь может выглядеть так — /home/u12345/scripts/script.pl.
Убедитесь, что файл имеет права на чтение+исполнение (r+x) для пользователя, от которого вы запускаете скрипт. Поменять права на нужные можно командой chmod 750 script.pl
750 — полные права владельцу файла, группе – чтение и исполнение, остальным – доступ запрещен.
Выполните команду crontab -e – планировщик будет менять план пользователя, от имени которого вы запускаете cron. При первом запуске будет предложен выбор текстового редактора. Выберите редактор с которым вы уже знакомы. Как пример мы рассмотрим текстовый редактор vi. После ввода команды вы окажетесь в текстовом редакторе vi (п), где сможете вводить текст сценария для cron.
Краткая справка по редактору vi:
- для вставки текста нажмите i, затем вводите текст
- для удаления символов нажмите ESC, а затем наберите x
- для выхода из vi без сохранения изменений нажмите ESC, а затем наберите :q!
- для сохранения и выхода нажмите ESC, а затем наберите :wq
Задания для cron пишутся по одному в строке. После каждой строки, в том числе после последней или единственной, обязательно нажмите enter, иначе задания работать не будут.
Задание выглядит как строка. В начале находятся пять обязательных полей, разделенных пробелами, для указания периодичности задания. Далее следует команда, которую нужно запускать:
поле1 поле2 поле3 поле4 поле5 команда
Значения первых пяти полей:
- минуты — число от 0 до 59
- часы — число от 0 до 23
- день месяца — число от 1 до 31
- номер месяца в году — число от 1 до 12
- день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)
Для каждого конкретного параметра можно задать несколько значений через запятую. Например, если в поле «часы» написать 1,4,22, то задание будет запущено в 1 час ночи, в 4 утра и в 22 часа. Можно задать интервал — 4-9 будет означать, что программу нужно запускать каждый час в период с 4 до 9 часов включительно.
Символ «*» означает «все возможные значения». Звездочка «*» в поле «часы» будет означать «запускать каждый час». Символ «/» служит для указания дополнительной периодичности задания. Например, «*/3» в поле «часы» означает каждые три часа. Если определены поля «день месяца» и «день недели» (не равны *), то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца.
13 13 10 * 5 /home/u12345/script.pl
такая команда будет выполняться в 13 часов 13 минут каждую пятницу и каждое 10 число месяца, даже если 10 число не совпадет с пятницей.
Cron позволяет запускать сценарии при загрузке системы — укажите @reboot в начале сценария вместо периодичности запуска:
@reboot /home/u12345/script.pl
Так выглядит простейший сценарий cron:
0 */3 * * 2,5 /home/u12345/script.pl
Скрипт /home/u12345/script.pl будет автоматически запускаться каждые три часа во вторник и в пятницу. Введите такой сценарий в редакторе vi, выйдите с сохранением результатов редактирования. Задание будет выполнятся с указанной периодичностью, если вы не допустили ошибок.
Cron сообщает об ошибках в сценарии:
/tmp/crontab.xxxxxxx: 1 строка, 9 символовcrontab: installing new crontab"/tmp/crontab.xxxxxxx":1: bad minutecrontab: errors in crontab file, can't installDo you want to retry the same edit?
Исправьте ошибки и попробуйте сохранить задание опять.
Посмотреть список уже установленных в cron сценариев можно командой crontab -l:
-bash-2.05b$ crontab -l
0 */3 * * 2,5 /home/u12345/script.pl
Если вам нужно запускать какую-то программу один раз в день, выбирайте ночное время. С с 2 до 8 часов ночи нагрузка на серверы минимальна. Если программа требует больших ресурсов, ночью она выполнится быстрее, чем днём.
Примеры использования cron
- выполнять задание раз в час в 0 минут — 0 */1 * * * /home/u12345/script.pl
- выполнять задание каждые три часа в 0 минут — 0 */3 * * * /home/u12345/script.pl
- выполнять задание по понедельникам в 1 час 15 минут ночи — 15 1 * * 1 /home/u12345/script.pl
- выполнять задание 5 апреля в 0 часов 1 минуту каждый год — 1 0 5 4 * /home/u12345/script.pl
- выполнять задание ежемесячно 1 числа в 6 часов 10 минут — 10 6 1 * * /home/u12345/script.pl
Как запустить PHP-скрипт по расписанию
Запускайте скрипты на языке PHP в указанное время с желаемой периодичностью с помощью PHP-CLI интерпретатора.Так может выглядеть команда на запуск скрипта script.php — /usr/bin/php -q $HOME/script.php> /dev/null 2>&1
Поскольку не все PHP-программы могут работать через CLI SAPI без предварительной модификации, можно запускать их через wget:
/usr/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123
Указывайте путь до утилит полностью, от корня файловой системы. Если в скрипте используются функции require, include, в которых указаны относительные пути — в начале выполняемого скрипта используйте вызов функции chdir(), которая задаст текущую рабочую директорию. Или воспользуйтесь встроенной командой cd.
@reboot cd /home/u12345 && ./script.pl
Как получить сообщения об ошибках от программ, запускаемых cron
Вы можете получать сообщения об ошибках при выполнении программ, чтобы полностью контролировать работу периодически запускаемых заданий. Для этого в начале cron-сценария поместите такую строку:
MAILTO=адрес@домен.ru, где «адрес@домен.ru» — это адрес электронной почты, куда придут уведомления. Чтобы указать несколько адресов, введите их через запятую.
Вы будете получать письмо с тем, что выводят скрипты каждый раз, когда cron запускает задачу. Если вы напишете скрипт, который будет печатать строчку «Hello, world» и поставите его на выполнение через cron — вы будете получать письмо со строкой «Hello, world» каждый раз, когда cron запустит такой скрипт.
Если текст, выводимый скриптом, вам не нужен — добавьте в конец строки-сценария для cron символы > /dev/null 2>&1
Полностью строка для cron будет выглядеть так:
0 1 * * * /usr/bin/php -q $HOME/script.php > /dev/null 2>&1
Проверьте корректность синтаксиса скриптов, которые вы устанавливаете на выполнение через cron. Скрипты могут содержать ошибку и работать неодинаково при запуске через веб-сервер и через cron, и так далее. Перед запуском проверьте скрипт командой в unix shell:
/usr/bin/php -l script.php
Если ошибок в скрипте нет, вы увидите сообщение «No syntax errors detected in script.php».
Как запустить сценарий от имени пользователя
Для повышения безопасности системы скрипт запускают от имени определённого пользователя. Убедитесь, что у пользователя есть права на запуск скрипта. Укажите перед основной частью скрипта su -l имя_пользователя, от которого хотите запустить скрипт.
Например, для запуска сервера TeamSpeak3 от имени пользователя ts3server используется следующая команда:
su -l ts3server ./ts3server_startscript.sh start
Скрипт расположен в домашнем каталоге пользователя, куда мы автоматически попадаем при авторизации.
Ограничения
Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов и так далее.