Cron — популярный инструмент в Unix-системах, который помогает запланировать исполнение различных заданий прямо в ОС. Операции будут совершаться в обозначенные дату и время, с указанной пользователем периодичностью. Такие отложенные процессы также называют cron jobs. Этот инструмент подходит для решения многих задач: отслеживания свободного дискового пространства, регулярного резервного копирования, удаления ненужных файлов (логов) и т.д.
Что такое cron и файлы crontab
Коротко cron можно описать как планировщик задач. Он способен в обозначенное время с определенной периодичностью выполнять скрипты на сервере. Например, разработчику нужно собирать статистику каждые 3 дня в 18:00. Для этого он создает «задание», логику которого описывает в файле crontab.
Файл crontab представляет собой таблицу, оформленную в специальном формате и содержащую расписание старта скриптов. Каждый пользователь на сервере системы получает доступ к индивидуальному crontab-файлу, в котором создает нужные ему задачи.
Cron является встроенной утилитой и доступен в каждом дистрибутиве Linux. Обратите внимание, он считается устаревшим в операционных системах с поддержкой systemd. В таких дистрибутивах Linux его заменили на systemd.timer. Предназначение этой утилиты полностью совпадает с cron. При этом популярность «устаревшего» планировщика все еще выше благодаря простоте использования.
Когда применяется cron
Как правило, от cron в операционных системах на основе Linux требуют выполнения очевидных задач, например бэкапов сайтов, баз данных и пр. Однако сфера применения этого инструмента гораздо шире.
- Пользователи могут с помощью планировщика запускать скрипты для корректировки системного времени. Эта операция нужна, потому что время ОС и аппаратного обеспечения может различаться (это нужно исправлять). Если для программной настройки обычно используется Network Time Protocol, то корректировку для «железа» может регулярно выполнять cron.
- Один из распространенных сценариев использования планировщика — создание оповещений, которые демонстрируются пользователю каждое утро. В этих сообщениях может содержаться информация о состоянии компьютера или любые другие полезные данные. Например, утилита может присылать администратору электронные письма с отчетом о работе сайта за последние сутки.
- Некоторые сервисы могут использовать cron даже без ведома владельца компьютера. Среди примеров можно назвать Rootkit Hunter, Logwatch и Logrotate. Большинство повторяющихся задач они настраивают, используя эту утилиту.
Cron дает пользователям возможность автоматизировать множество задач и сократить влияние человеческого фактора на работу сервера. Например, утилита не забудет сделать резервную копию.
Основные принципы работы с cron и crontab через SSH-протокол
В тех случаях, когда хостинг-провайдер не предоставляет пользователю функциональных веб-интерфейсов для управления сервером, для работы с cron приходится использовать командную строку. Для подключения к серверу понадобится протокол Secure Shell.
Чтобы работа с планировщиком стала проще, предусмотрен ряд команд для решения основных задач:
- crontab -e — открытие файла конфигураций (настроек);
- crontab -l — демонстрация списка, то есть всех запланированных операций для конкретного пользователя;
- crontab -r — полное удаление файла настроек и всех задач текущего пользователя;
- crontab -v — информация о последнем открытии файла конфигураций;
- man crontab — позволяет узнать подробную информацию.
Для планировки задач через командную строку нужно выполнить первичную настройку, убедиться, что отсутствуют ограничения, и заполнить расписание в файле crontab.
Первичная настройка cron
В своей работе планировщик задач использует информацию из таблиц crontab. Как отмечалось ранее, каждый пользователь на сервере вне зависимости от прав (в том числе root) должен иметь свой индивидуальный файл crontab. По умолчанию в системе их нет, поэтому они создаются вручную.
Чтобы создать таблицу, нужно ввести команду crontab -e. После этого в директории /var/spool/cron автоматически появится нужный файл. |
Если команда crontab -e выполняется впервые, система предложит определить, какой редактор будет использоваться. На выбор может быть предложено несколько вариантов, из которых /bin/nano будет самым простым, также пользователь может увидеть /usr/bin/vim.basic и другие. Каждый вариант будет пронумерован. Чтобы выбрать, нужно нажать соответствующую цифру.
Новый файл crontab представляет собой пустое текстовое поле. Пользователь с нуля добавляет в него задачи, используя соответствующий синтаксис. Когда все параметры будут введены, нужно сохранить их нажатием клавиши F2. Чтобы закрыть файл, необходимо нажать F10. Если пользователь все сделал правильно, в терминале появится строка следующего содержания:
crontab: installing new crontab
За работу планировщика задач после сохранения настроек в Linux отвечает фоновый процесс crond.
Формат записей
Для создания заданий в cron используется специальный формат строк в таблице-расписании. В каждой из них содержится определенная информация:
- параметры для запуска нужной задачи (дата, время);
- сама команда для выполнения операции.
Команда в этом случае — название скрипта в файловой системе Linux. К скриптам можно добавлять различные специальные параметры, они отделяются от названия при помощи пробелов.
Синтаксис crontab
Сначала нужно ввести команду crontab -e. Код в первых трех линиях таблицы нужен для настройки первичных параметров таблицы. Сначала необходимо выбрать оболочку для работы утилиты. У cron нет рекомендаций по оптимальному варианту — планировщик будет стабильно работать в любой оболочке. Если пользователь хочет получать отчеты о работе cron, нужно указать email, куда их отправлять. Третьей строкой прописывается путь к окружению.
Описание самой задачи начинается с ввода значений в 5 специальных полей, которые указывают, в какое время запустится нужный процесс.
- Минуты (допустимы параметры от 0 до 59).
- Часы (можно ввести значения от 0 до 23).
- Дата (от 1 до 31).
- Месяц (порядковый номер от 1 до 12).
- Дни недели. Отсчет начинается с воскресенья, которое обозначается как 0, суббота, соответственно, 6. Также доступны варианты с сокращениями SUN, MON и т.п.
Между значениями этих полей необходимо ставить пробелы, чтобы отделять их друг от друга. Чтобы процесс корректно запускался, параметры времени также необходимо отделять пробелом от названия скрипта.
На изображении выше показан шаблон, который помогает понять, как вводить параметры в расписание. Обратите внимание на значки * — это конкретные значения, которые нужно ввести, чтобы задать время выполнения задачи. Когда в поле нет числа, а есть только *, значит, скрипт будет подставлять любые возможные значения. Если оставить * в поле месяца, но прописать значения в предыдущих, скрипт будет выполняться ежемесячно в конкретный день, если он есть. Например, планировщик не запустит процесс в феврале, если дата выставлена на 30 число.
Стандартная запись будет выглядеть так:
20 07 * * * /home/admin/backup
Она означает, что cron ежедневно будет запускать команду /home/admin/backup утром в 7 часов 20 минут.
В полях даты и времени допустимо использовать дополнительные символы.
- Запятые — для создания перечней. Можно прописать в поле «часы» значение 5,10,19, в этом случае указанная команда в течение суток будет запускаться трижды — в 5, 10 и 19 часов.
- Слэши — для создания цикличности. Запуск команды можно описать с помощью временных промежутков без привязки к конкретному времени. Например, ввести */20 в поле «минуты», тогда скрипт будет срабатывать каждые 20 минут.
- Тире — для обозначения промежутка. Можно ввести в поле «дни недели» параметры «0-3», чтобы скрипт срабатывал с воскресенья по среду, а в остальные дни не запускался.
Важно учитывать, что запуск команд привязан к серверному времени и к часовому поясу (timezone). Чтобы узнать второй параметр, можно обратиться к службе поддержки хостинга или ввести команду date в командную строку.
Существуют уже готовые команды, которые позволяют задать параметры выполнения скрипта. Они выглядят так:
- @reboot — команда выполнится один раз при перезагрузке системы;
- @yearly — задание будет выполняться один раз в год;
- @annually — вариация команды @yearly, делает то же самое, но в Новый год;
- @monthly — ежемесячное выполнение задания;
- @weekly — скрипт будет срабатывать раз в неделю;
- @daily — ежедневное выполнение;
- @midnight — срабатывание раз в день в полночь;
- @hourly — скрипт выполняется ежечасно.
Записи с готовыми командами выглядят следующим образом:
@monthly <исполняемая-команда>
Какие команды можно задавать в Cron через командную строку
Приведем примеры, как могут выглядеть команды в файле crontab для выполнения различных заданий.
Команда №1
03 07 10 * * /usr/local/bin/backup -vbd1 ; /usr/local/bin/backup -vbd2
Такая команда создаст в расписании задание на запуск процесса backup (его нужно будет сначала создать), который будет проводить резервное копирование на сторонний накопитель всех системных файлов. Скрипт будет запускаться в 7 часов 3 минуты 10 числа. Оставшиеся поля со звездочками показывают, что у задачи нет конкретных значений месяца и дня недели, значит, бэкап будет выполняться ежемесячно.
Команда №2
32 12 * * * /sbin/hwclock —systohc
Эта задача заставляет приводить к единому значению время в операционной системе и аппаратном обеспечении. Происходить данный процесс будет ежедневно в 12 часов 32 минуты. Здесь не указана дата, поэтому cron воспринимает задание как подлежащее к исполнению ежедневно.
Команда №3
15 03 21 * * /usr/bin/apt-get update
Эта задача обновит пакеты через пакетный менеджер apt. Выполняться эта операция будет ежемесячно 21 числа в 03:15.
Ограничения Cron
Планировщик cron позволяет установить ограничения на его использование. Чтобы задать их, существуют специальные файлы cron.deny и cron.allow.
Cron.deny располагается в /usr/lib/cron/cron.deny. Этот файл содержит названия учетных записей, которым запрещено пользоваться планировщиком. Они не могут создать свой crontab и задания в нем.
Cron.allow располагается в /usr/lib/cron/cron.allow. В файле находится перечень имен пользователей, которым разрешено планировать задачи с использованием данной системной утилиты.
Когда в системе нет cron.allow, то не существует никаких ограничений на планирование задач — все пользователи по умолчанию могут пользоваться возможностями Cron, если имен их учетных записей нет в файле cron.deny.
Основные принципы работы с планировщиком через панель управления
В меню панелей управления сервером многие хостинг-провайдеры предусматривают отдельное меню, которое позволяет пользоваться возможностями Cron. Например, в панели управления Timeweb для создания задачи требуется зайти в раздел Crontab. В интерфейсе он расположен сбоку слева. В открывшемся меню нужно нажать на кнопку «Добавить новую задачу» и ввести ее параметры. Разберемся, что именно нужно учитывать при создании повторяющегося задания.
- Задаче нужно дать название, в котором не будут использоваться спецсимволы. Подойдет любой текст, но желательно описать, что именно в этом случае будет делать cron, чтобы в дальнейшем не запутаться.
- Следует обозначить исполнителя задачи. Это значит, пользователь указывает, с чем будет работать планировщик (HTTP-запросом, PHP-скриптом или файлом).
- Затем заполняется графа «Путь до файла». Здесь должен быть путь до того скрипта, который будет регулярно запускаться с помощью cron. Например, это может выглядеть так: /home/usr/someusername/thescriptfortest.php. Панели управления также предлагают воспользоваться встроенным файловым менеджером, чтобы упростить работу.
- На финальном этапе настройки указывается, с какой периодичностью будет исполняться задача. Панель управления предлагает несколько вариантов по умолчанию в стиле «Раз в день», но пользователь может выбрать вариант «Продвинутые настройки» и задать параметры вручную. После этого останется нажать «Создать задачу».
Работа с планировщиком через панель управления легче: пользователю не нужно запоминать синтаксис crontab, вероятность ошибки очень мала. Предлагаем посмотреть, как Cron выглядит в интерфейсе ISPmanager.
Синтаксис crontab-генераторов
Добавление заданий можно сильно упростить, если использовать специальные веб-инструменты. Они позволяют не изучать синтаксис, потому что обладают графическим интерфейсом: достаточно ввести нужные параметры, а задания будут создаваться сами. Затем сайт генератора выдаст код, который можно скопировать и вставить в crontab.
Crontab.guru
Сайт, который позволяет быстро изучить разные варианты заданий для Cron. Просто введите данные, и сайт самостоятельно сгенерирует конечное задание. Этот веб-ресурс также предлагает подсказки и примеры стандартных задач для планировщика.
Crontag Generator
Второй ресурс для генерации кода, который потом можно использовать в crontab-файле. Принцип работы такой же, как у предыдущего сайта: пользователь вводит данные, проставляет флажки в чекбоксы и в итоге нажимает кнопку Generate Crontab Line.
0 комментариев