
Первый ответ на вопрос «Что такое CronJob?» — это «демон». Второй ответ: бог. Запутались? Эти ответы относятся только к этимологии названия. Строго говоря, Cron действительно означает «команда, выполняемая по уведомлению». Однако аббревиатура также намекает на Хроноса, древнегреческого бога времени. В операционных системах, таких как Linux или macOS, команда выполняется как демон cron (также называемый системой cron). Вот и все.
Аллюзия на греческого бога времени, кстати, является отличной мнемоникой для запоминания назначения CronJob. Система cron работает в фоновом режиме операционной системы и может автоматически выполнять задачи (задания) в заданное время. Таким образом, если сложить вместе cron-систему и другое название фиксированной задачи, получится термин CronJob.
- Что такое CronJob?
- Какие задачи может выполнять CronJobs?
- Кратко о наиболее важных задачах
- Как выглядит обычная команда CronJob?
- Как работает CronJob?
- Четыре коротких примера CronJob
- Пример 1: Резервное копирование с помощью CronJob
- Пример 2: Звук будильника
- Пример 3: Напоминания
- Пример 4: Спасибо, администраторы!
Что такое CronJob?
CronJob — это задание, которое выполняется автоматически в операционных системах. Система регулярно выдает команды для этих заданий. Это может быть одно задание, но обычно это несколько сложных заданий, т.е. несколько CronJobs. Преимущество CronJobs в том, что они могут быть очень индивидуализированы.
Каждый CronJob состоит из трех компонентов:
- Сценарий, который должен быть выполнен
- Команда, которая будет выполнять скрипт на регулярной основе
- Действие или результат выполнения скрипта.
Практическими примерами его использования являются повторяющиеся серверные задачи. Среди прочего, рассылка новостей, статистические опросы или очистка баз данных автоматически инициируются CronJobs.
Все операционные системы, в которых есть система cron или демон cron, могут использовать CronJobs. Сюда входят все Unix и BSD (Berkeley Software Distribution) системы, такие как macOS или Linux.
Операционные системы могут заставить CronJobs выполняться в соответствии с их девизом «Команда выполняется по уведомлению» через заданные интервалы времени. Таким образом, рутинные задачи могут выполняться совершенно независимо от дополнительного ввода данных пользователем. Помимо операционной системы с демоном cron, для настройки CronJobs необходимо наличие следующих предварительных условий:
- выделенный сервер
- защищенная оболочка (SSH) или клиент Telnet
- FTP-клиент для передачи файлов или загрузки файлов cron.
Существуют специальные пользовательские интерфейсы для простой настройки CronJobs, а также пакеты веб-хостинга, которые предоставляют предварительно настроенные CronJobs для веб-проектов. Для веб-хостинга с CronJobs мы рекомендуем посмотреть нашу статью Помощь по Cronjob.
Какие задачи может выполнять CronJobs?
Вероятно, самым распространенным применением CronJobs является резервное копирование данных. Например, если вы хотите создавать резервную копию с помощью tar через регулярные промежутки времени для архивирования данных, CronJobs идеально подойдет. Очистка баз данных и обработка статистики посещений на веб-сайтах также входят в число типичных применений CronJobs.
CronJobs может взаимодействовать с системой управления контентом для автоматической рассылки информационных бюллетеней или проверки уровня запасов в интернет-магазинах. Вы отслеживаете нагрузку на сервер и можете автоматически корректировать новую информацию в описании товара, например, среднюю оценку пользователя.
Автоматизированные задачи CronJobs настолько разнообразны, что их следует использовать с осторожностью, поскольку они требуют много ресурсов. Поэтому важно подумать, действительно ли имеет смысл использовать CronJob и когда его устанавливать. Подходящие PHP-скрипты обеспечивают запуск CronJobs только тогда, когда они не мешают другим процессам.
Кратко о наиболее важных задачах
- Очистка баз данных: Удаляются устаревшие записи; сюда входят устаревшие комментарии или записи о входе в систему, которые уже неактуальны.
- Создание статистики: CronJobs может, например, ежедневно обновлять данные о просмотрах страниц сайта.
- Обновление RSS-канала: XML-файл может регулярно обновляться с помощью CronJob.
- Планирование и публикация нового контента
- Информационные бюллетени: Электронные письма могут быть отправлены в течение определенного периода времени.
- Генерирование счетов-фактур: Счета-фактуры могут генерироваться и отправляться независимо друг от друга — пакетно и через фиксированные промежутки времени.
- Резервное копирование баз данных: В основном это относится к небольшим базам данных, размер которых не превышает 20 МБ.
- Машинное обучение: Через CronJob искусственный интеллект может получать новые записи данных в определенное время.
- Обновления: Обновления программного обеспечения могут быть предоставлены в определенное время.
Как выглядит обычная команда CronJob?
Возможность индивидуализации — одно из главных преимуществ CronJob. Для настройки CronJob существует базовый набор из трех переменных, которые могут быть выполнены в любое время:
- PATH: указывает путь поиска команд или сценария.
- SHELL: направляет командный интерпретатор на выполнение скрипта.
- MAILTO: показывает пользователей, которым следует передать результаты CronJob; по умолчанию это подписчик.
Пользователи могут сами определять CronJobs с помощью этих трех переменных и любого количества других переменных. Обычно для команд используются сценарии SHELL, PHP и PERL.
Вы можете получить больше информации о командах в Linux и Co. в нашей базовой статье о командах Linux.
Как работает CronJob?
Чтобы CronJob выполнил свою работу, необходимо заранее отдать команду. Затем демон cron работает в фоновом режиме и выполняет неинтерактивные задания. Кстати, в Windows эта функция известна как «службы».
CronJobs в основном простаивают и ждут команды, либо непосредственно в операционной системе, либо от другого компьютера в сети. Команда подается через cron-файл (простой текстовый файл), который задает задание на определенное время.
CronJobs определяются и настраиваются в таблице, также известной как crontab. В ней указаны время и последовательность команд, которые должны быть выполнены.
Программа, используемая для редактирования отдельных кронтабов, также называется «Crontab».
Системный файл crontab «crontab» по умолчанию находится в каталоге crontab /etc/cron.*/.
Четыре коротких примера CronJob
Кронтабы можно редактировать с помощью программы crontab. Для этого требуется следующая команда:
crontab -e
Синтаксис программы довольно прост. Каждый cronjob имеет следующий формат:
* * * * * Command to be executed
- - - - -
| | | | |
| | | | +----- Weekday (0 - 7) (Sunday is 0 and 7)
| | | +------- Month(1 - 12)
| | +--------- Day (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)
Звездочка * означает, что CronJob всегда должен выполняться в соответствующий день, месяц, час или минуту. Для дней недели и месяцев можно использовать первые три буквы, например, ‘sun’ для воскресенья. Информация о точных временных периодах не может быть предоставлена с помощью этой формы обозначений.
Для получения более точной информации о периодах времени звездочка заменяется цифрами. Если вы установите первую цифру 8-10, команда будет выполнена на 8-й, 9-й и 10-й минуте. Если вы установите */2, команда будет выполняться каждую вторую минуту. Оба значения можно комбинировать. Всего для первых пяти цифр возможны три значения времени:
- * = выполнение всегда (при каждом задании)
- */n = выполнение каждые n (временной интервал)
- n,x,y = выполнение в/на n,x,y
Пример 1: Резервное копирование с помощью CronJob
Чтобы запускать резервное копирование каждое утро в 6 утра, вам нужна следующая команда:
0 6 * * * /usr/bin/backup.sh
Пример 2: Звук будильника
CronJobs можно также использовать для воспроизведения звука через регулярные промежутки времени:
*/30 * * * * /usr/bin/play_sound.sh
Пример 3: Напоминания
Напоминания по электронной почте в 8 утра и 6 вечера отправляются следующим cronjob:
0 8,18 * * * /usr/bin/send_reminder_mail.sh
Пример 4: Спасибо, администраторы!
Или вы можете использовать CronJobs, чтобы больше никогда не забывать о дне системного администратора:
0 0 30 07 * (echo “Message body”|mail -s “Message Subject.” user@domain.xy)