Для автоматического выполнения скриптов на сервере Ubuntu используются задания Cron. Этот метод автоматизации популярен среди веб-мастеров по всему миру. Чтобы лучше разобраться в настройке и работе Cron, рассмотрим основные термины:
- Cron — это планировщик, который позволяет запускать скрипты на сервере по заданному расписанию.
- Cron job — это конкретное задание, которое выполняется в определенное время с помощью Cron.
- Crontab — конфигурационный файл, содержащий записи о cron job. Он представляет собой таблицу или мини-базу данных.
Таким образом, все задания Cron сохраняются в конфигурационных файлах вместе с информацией о времени их выполнения.
Примеры использования Cron-задач
- Автоматическое создание и отправка счетов клиентам, оформившим подписку.
- Деактивация учетных записей клиентов, которые соответствуют определенным условиям, например, были неактивны длительное время.
- Автоматическое использование почтового API для рассылки информационных уведомлений подписчикам.
- Применение штрафных санкций к тем, кто нарушил график выплат по кредитам и т.д.
Настройка Cron-задач
Синтаксис для описания задания Cron прост: указываются время запуска, пользователь и команда для выполнения. Прежде чем приступить к примерам, убедитесь, что у вас есть все необходимое для работы с Cron.
Автоматизация с помощью Cron значительно упрощает управление серверными задачами, но важно следить за корректностью настроек. Ошибки в синтаксисе crontab могут привести к сбоям в работе запланированных процессов. Поэтому рекомендуется тестировать задания перед их добавлением в основной конфигурационный файл. Для проверки можно использовать временные crontab-файлы или команду crontab -l, чтобы убедиться в правильности всех записей.
Кроме этого, мониторинг выполнения Cron задач играет важную роль в их поддержке. Вы можете перенаправлять результаты выполнения скриптов в файлы логов, добавив команды вывода: >> /path/to/logfile 2>&1. Это позволит анализировать логи в случае возникновения неполадок и оперативно устранять проблемы.
Системные требования
- VPS-сервер с установленной Ubuntu
- Пользователь с правами sudo (не root)
Если всё это у вас есть, можно переходить к дальнейшим шагам.
Редактируем crontab с помощью текстового редактора nano
Для редактирования crontab, в котором находятся все задания cron, откройте окно терминала и выполните в нем следующую команду:
$ sudo nano /etc/crontabПосле того как файл откроется, вы увидите несколько строк. Для нас интерес представляют заголовки столбцов и список, имеющихся заданий cron:
Каждый столбец (m, h, dom, mon, dow, user, command) имеет свое значение. Сначала идут 5 переменных, которые отвечают за время выполнения задания:
- m – минута (значение минуты от 0–59);
- h – час (значение минуты от 0–23);
- dom – число месяца (значение минуты от 1–31);
- mon – месяц (значение минуты от 1–12);
- dow – день недели (значение минуты от 0–6, воскресенье - 0).
Затем идут переменные, которые определяют пользователя и само задание:
- user - пользователь, от чьего имени будет запущено выполнение cron;
- command - команда Linux или скрипт, которые нужно выполнить.
Примеры заданий cron
Вы можете контролировать время запуска своих задач в течение года. Вот несколько примеров полезных команд:
Крон, который запускается каждую минуту
* * * * * [пользователь] [команда]
Крон, который запускается на 5-й минуте каждого часа
5 * * * * [пользователь] [команда]
Крон, который запускается каждый час (каждый раз, когда минута становится нулевой)
0 * * * * [user] [command]
cron, который запускается каждый день в полночь (каждый раз, когда час становится равным нулю)
0 0 * * * [пользователь] [команда]
Cron, который запускается каждый день в 5:15 утра в декабре
15 5 * 12 * [пользователь] [команда]
Звездочки в таймингах crontab
Очень часто в таймингах используют не цифры, а звездочки. Это значит, что задание должно выполняться при всех возможных значениях для этой переменной. Например, если вы используете звездочку в значении h, cron будет запускаться каждый час.
Оператор деления/прямой слэш/оператор mod в заданиях Cron в Ubuntu
Внимательный читатель уже задается вопросом – а как запускать задания, например, каждые 5 минут? Покажем на примере:
*/5 * * * * * [пользователь] [команда]
В этом случае задание cron будет запускаться каждые 5 минут: 0, 5, 15, 20, 25, 30, 35, 40, 45, 50, 55. То есть каждый раз, когда текущее время будет кратно нулю без остатка.
Запятые в crontab
Используя запятые, вы можете указать несколько значений для одной переменной. Например, у вас есть приложение, которое должно готовить ежеквартальный отчет, то есть запускаться 4 раза в год. Это легко реализовать, используя следующее задание cron:
0 2 1 1,4,7,10 * [пользователь] [команда]
Как cron обработает это задание? Каждый первый день января, апреля, июля и октября в 2 часа ночи наше приложение будет автоматически запускаться. Если цифровая запись немного трудна для вас, вы можете использовать при составлении задания текстовые переменные:
0 2 1 Jan, Apr, Jul, Oct * [пользователь] [команда]
Тире в crontab Ubuntu
Кроме слэша и запятых при составлении задания cron, можно использовать тире. Оно будет обозначать диапазон значений. Например, если задачу нужно запускать раз в час между 6 и 9 часами утра, запись в crontab будет выглядеть так:
0 6–9 * * * * [пользователь] [команда].
Запуск файлов PHP через crontab в Ubuntu
CGI скрипты на стороне сервера Ubuntu будут запускаться без каких-либо доработок. А вот для запуска PHP скриптов, потребуется выполнить некоторые действия.
Чтобы запустить PHP-скрипт через crontab, используйте следующий синтаксис:
* * * * * * /usr/bin/php [путь к вашему php-скрипту]
Это заставит PHP-файл запускаться через тот интерпретатор PHP, который укажете вы, например, /usr/bin/php.
Пример
* * * * * root /usr/bin/php /var/backup.phpЭто задание ежеминутно будет запускать скрипт резервного копирования
Заключение
Наличие инструментов для создания и запуска заданий cron, позволяет автоматизировать большинство рутинных процессов.
Кстати, после того как вы закончите редактировать конфигурационный файл '/etc/crontab' в редакторе nano, обязательно сохраните изменения в нем. Для этого нажмите CTRL+X и S.
И последний совет. Убедитесь, что на вашем сервере выставлен правильный часовой пояс, чтобы не искать причину того, что скрипты запускаются в непонятные дни и время.





