Что такое CRON и как его использовать
Cron – один из самых популярных демонов на Linux, который по сути представляет собой продвинутый планировщик задач. Является важным компонентом всех Linux-подобных систем и применяется администраторами для планировки расписания запуска определенных программ и скриптов в заданное время. Администратор может устанавливать периодичность запуска скриптов, регулировать продолжительность их работы и т.д. В этой статье мы постараемся максимально подробно рассказать о принципах использования cron через панель управления и SSH-протокол, поделимся советами по первичной настройке программы и проведем небольшой экскурс по синтаксису cron.
Cron и crontab: что это
Два фундаментальных компонента, принципы работы которых необходимо понимать любому администратору VPS/VDS. Если сказать проще, то:
- Cron – это планировщик задач. С его помощью вы можете настроить запуск определенных скриптов с заданными интервалами. Например, вы можете каждый день в 8 часов вечера собирать статические данные с сервера, или формировать логи, или делать бэкапы, или настроить проверку обновлений для системы. В общем, полезная штука, с каких сторон бы не посмотреть.
- Crontab – это таблица, где записано расписание запуска скриптов и программного обеспечения. Она имеет специальный формат, который поддерживается демоном и считывается сервером.
На каждую учетную запись приходится своя таблица crontab, поэтому для всех пользователей можно настроить свое расписание и установить какие-то специфические задачи.
Принцип использования Cron
Этот демон широко используется для настройки повторяющихся заданий при работе сервера. По сути, список возможных сценариев использования ограничивается лишь навыками и фантазией администратора. Вот несколько примеров сценариев использования Cron:
- планирование оповещений, которые предоставляют информацию о состоянии сервера, физических показателях оборудования и т.д.;
- формирование логов по системе безопасности;
- коррекция системного времени для аппаратного и программного обеспечения;
- резервное копирование данных;
Богатый синтаксис демона позволяет настроить любую периодичность заданий, начиная с часа и заканчивая выполнением раз в году. Умение грамотно использовать Cron важно, поскольку снижает необходимость вмешательства в работу сервера со стороны администратора. По сути, работу VPS/VDS можно полностью автоматизировать, а когда под управлением специалиста находится сразу несколько десятков серверов, то умение правильно настроить планировщик задач – жизненно необходимая вещь.
Принцип работы Cron и crontab через панель управления
У многих хостинг-провайдеров есть собственная панель управления, в которой разработчики предусмотрели возможность более удобной настройки планировщика задач через графический интерфейс. Например, такой планировщик есть в ISPmanager, и для формирования задач достаточно перейти в раздел «Планировщик CRON», расположенный в меню слева, и нажать на «Создать».
В появившемся окне потребуется ввести:
- Адрес e-mail. Сюда вписываем почтовый адрес, на который будут приходить уведомления о статусе выполнения заданий. Можно оставить пустым, если в этом нет необходимости.
- Команду – сюда вписываем путь к программе, которую ставим на выполнение. Если планируете запускать php-скрипт, прописываем также путь к интерпретатору. Например, так: /usr/bin/php7.0 /var/www/new_user/data/www/mysite/script.php.
- Расписание – настраивается в базовом или в экспертном режиме, здесь вы задаете периодичность выполнения задач.
- Описание – просто комментарий, позволяющий более удобно ориентироваться в планировщике. Если заданий много, то очень полезная вещь, не пренебрегайте.
Как видите, ничего сложно, и настройка задач cron через панель управления ISPmanager делается элементарно. То же самое можно сказать и большинстве других панелей управления, таких как cPanel, VirtualMin, DirectAdmin и т.д.
Принцип работы Cron и crontab через SSH-протокол
Бывает и такое, что настраивать планировщик через панель управления не представляется возможным, или неудобно, или просто не интересно. Но опытный администратор легко всё может настроить и по старинке, через командную строку. Для этого нам сперва потребуется подключиться к серверу через протокол SSH.
Рассмотрим 5 ключевых параметров команд Crontab:
- crontab -e – для редактирования или создания файлов расписания под текущую учетную запись;
- crontab -l – отображение содержания таблицы с расписанием в текущей учетной записи;
- crontab -r – очистка файла с расписанием;
- сrontab -v – показ даты, когда конфиг открывался в последний раз;
- crontab -u user – работа с расписаниями отдельных пользователей.
Последний параметр доступен только для учетных записей с правами суперпользователя.
Ну а чтобы работать с планировщиком Cron через консоль, необходимо сперва провести первичную настройку программы и убрать возможные ограничения.
Первичная настройка Cron
Выше мы уже писали, что таблицы с расписанием у каждого пользователя свои, индивидуальные, но по умолчанию они не существуют, и их нужно создать. Команда crontab -e позволяет сгенерировать таблицу, которая появится в директории /var/spool/cron. Файл будет абсолютно пустой, так что параметры придется заполнять вручную, применяя знания о синтаксисте cron. Давайте немного познакомимся с синтаксисом демона:
# crontab -e SHELL=/bin/bash MAILTO=вашапочта@домен.com PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin # Детали представим далее # Пример постановки задачи через планировщик: # .---------------- минуты (0 - 59) # | .------------- часы (0 - 23) # | | .---------- дни месяца (1 - 31) # | | | .------- сами месяцы (1 - 12) OR may,jun,sept,aug ... # | | | | .---- дни недели (0 - 6) (0 или 7 будет означать воскресенье, зависит от параметров системы) позволяется использовать сокращения в духе mon,tue,wed,thu,fri,sat,sun # | | | | | # * * * * * имя пользователя команда, которую необходимо запланировать # создание бекапа всей ОС с помощью кастомного скрипта 01 01 * * * /usr/local/bin/bckp -vbd1 ; /usr/local/bin/bckp -vbd2 # чтобы установить соответствие времени между ОС и «железом», используется следующий синтаксис: 03 05 * * * /sbin/hwclock –systohc # а вот так можно запланировать обновления ОС: 25 04 1 * * /usr/bin/apt-get update
Для первичной настройки важнейшими являются первые три строчки. Здесь мы указываем оболочку для Cron, адрес электронной почты для получения уведомлений, а также путь к окружению. Синтаксис демона включает формат времени и команду, которую должен выполнить планировщик в определенный момент времени.
Для наглядности приведем несколько примеров использования скриптов с помощью планировщика. Вот так можно задать выполнение скрипта каждый вторник в 10:00 и в 19:00 часов:
2 10,19 * * 1 /home/evgen/script.sh
А вот так устанавливается ежедневный сценарий в 0:30 и 12:30:
30 */12 * * * script.sh
В общем, ничего сложного здесь нет, всё делается элементарно. При необходимости вы можете даже запланировать сразу несколько задач в одной записи, для этого их нужно разделить точкой с запятой:
* * * * * /scripts/script.sh; /scripts/scrit2.sh
Ну и напоследок предлагаем пример скрипта, который будет запускать поиск обновлений для системы и ПО через пакетный менеджер apt ежемесячно, первого числа в 4 утра:
00 04 1 * * /usr/bin/apt-get update
Если хотите изучить тонкости применения демона более глубоко, рекомендуем изучить документацию на официальных энциклопедиях по администрированию Linux.
Установка ограничений у Cron
Есть два файла, которые ограничивают доступ к планировщику задач:
- /etc/cron.allow – здесь содержатся данные об учетных записях пользователей, которые могут планировать задачи;
- /etc/cron.deny – а здесь перечислены те пользователи, которым не разрешается работать с планировщиком.
Записи в обеих файлах нужно вести так: одно имя пользователя в каждой строке без пробелов. Это так называемые файлы контроля доступа, и они будут считываться каждый раз, когда пользователь попытается работать с планировщиком. Если имя учетной записи указано одновременно в обеих файлах, то файл /etc/cron.deny будет игнорироваться. Если же оба эти файла не существуют, то на сервере не будет никаких ограничений, связанных с планировщиком.
Дополнительные сведения
Во-первых, не брезгуйте указывать почтовый адрес в параметрах планировщика, так как это позволит вам своевременно получать важные сообщения о событиях на сервере. Если вдруг будут ошибки, вы сможете их оперативно устранить.
Во-вторых, многие не знают, как добавить в планировщик на выполнение скрипт PHP. Давайте посмотрим на примере скрипта с таким путем: /var/www/user/data/www/вашдомен.com/script.php. Вот так его можно передать интерпретатору:
/usr/bin/php /var/www/user/data/www/вашдомен.com/script.php
А вот так можно вызвать скрипт через wget:
/usr/bin/wget вашдомен.com/script.php
Если остались какие-то вопросы, можете поинтересоваться у наших специалистов по контактным номерам телефонов или через Livechat. Спасибо за внимание!