Как использовать Cron в Linux: советы, подсказки и примеры
Ваше полное руководство по заданиям cron и crontab в Linux. От основ до дополнительных советов — изучите все, что вам нужно для успешного планирования.
Задания Cron — это фундаментальный, но мощный инструмент в операционной системе Linux. Эти планировщики заданий на основе времени незаменимы как для системных администраторов, разработчиков, так и для технических энтузиастов, поскольку позволяют автоматизировать рутинные задачи.
Целью этой статьи является демистификация заданий cron. Он предлагает подробное руководство, в котором объясняется, что такое задания cron, как они работают и, что наиболее важно, как вы можете использовать их для автоматизации повторяющихся задач в вашей системе Linux.
Итак, независимо от того, хотите ли вы настроить файлы автоматического резервного копирования, запускать сценарии в определенное время или автоматизировать ваши личные проекты, эта статья покажет вам, как задания cron делают все это возможным. Итак, давайте погрузимся!
Что такое Крон?
Cron — это планировщик заданий на основе времени в Unix-подобных операционных системах, включая Linux и macOS. Он позволяет пользователям планировать периодический запуск заданий (команд или сценариев) в фиксированное время, даты или интервалы.
Чаще всего он используется для автоматизации задач обслуживания или администрирования системы, но его можно использовать для любых целей, требующих регулярного запланированного выполнения команд.
Как работает Крон
Основным фоновым компонентом является демон cron по имени crond. Его основная задача — проверять запланированные задачи и выполнять их, когда наступает указанное время.
Демон просыпается каждую минуту, чтобы проверить наличие заданий в файлах crontab или конфигурации на основе каталога. Это естественным образом подводит нас к следующему важнейшему аспекту Cron, лежащему в основе его оперативной настройки — файлам и каталогам, которые он использует.
Файлы и каталоги Cron
Файлы Crontab — это сердце системы планирования заданий cron. «Crontab» означает «таблица cron», поскольку эти файлы содержат список команд, которые нужно запускать в запланированное время.
Каждая строка в файле crontab представляет собой отдельное задание и содержит информацию о том, когда запускать задание, а затем команду, которую необходимо выполнить.
По сути, файлы crontab бывают двух разновидностей: файлы, принадлежащие отдельным пользователям, и общесистемные файлы «/etc/crontab». Ниже приведены ключевые детали, которые вам следует знать в отношении обоих.
Но перед этим важно кое-что уточнить. Файлы cron, принадлежащие отдельным пользователям, не хранятся в их домашних каталогах, а находятся в каталоге «/var/spool/cron». В то же время файлы заданий cron для системных служб и приложений обычно размещаются в папке «/etc/cron.d».
Кронтабы пользователей
Пользовательские crontabs индивидуальны для каждого пользователя системы. Пользователи могут использовать файл crontab для планирования задач под своим идентификатором пользователя.
Основное преимущество пользовательских crontabs заключается в том, что они позволяют отдельным пользователям управлять расписаниями своих заданий, не требуя привилегий администратора.
Общесистемный Crontab
В отличие от файлов crontab, специфичных для пользователя, «/etc/crontab» является общесистемным файлом конфигурации. Он имеет немного другой формат, чем пользовательские crontabs, и включает поле пользователя, в котором указывается учетная запись пользователя, под которой должна выполняться команда.
Это позволяет системным администраторам планировать запуск заданий под любым пользователем, не изменяя crontab этого пользователя, что обеспечивает большую гибкость в управлении задачами для разных учетных записей пользователей.
Обычно файл «/etc/crontab» обычно используется для заданий, которые необходимо запускать с правами администратора или которые необходимы для работы системы.
Еще одним важным моментом является то, что, хотя пользователи могут редактировать свои записи crontab, общесистемный crontab может редактироваться непосредственно только пользователем root.
Каталоги Крона
Помимо файлов crontab, большинство систем Linux включают набор каталогов, которые сканируются cron на наличие запланированных заданий: «/etc/cron.daily», «/etc/cron.hourly», «/etc/cron.weekly» и «/etc/cron.monthly».
Эти каталоги позволяют более просто планировать задачи, которые необходимо запускать регулярно, без указания точного времени в crontab.
Скрипты и исполняемые файлы, размещенные в этих каталогах, запускаются один раз в день, час, неделю или месяц соответственно. Точное время выполнения сценариев в этих каталогах определяется конфигурацией, найденной в «/etc/crontab» или файле конфигурации демона, обычно расположенном в «/etc/cron.d/». ».
Основы синтаксиса Cron
Задание cron определяется строкой текста в файле Cron (crontab). Каждая строка состоит из ряда полей, разделенных пробелами или табуляциями, за которыми следует команда или сценарий, который необходимо выполнить. Основной синтаксис задания cron следующий:
minute hour day_of_month month day_of_week command_to_execute
Давайте углубимся в каждый компонент:
Минута (0-59)
В этом поле указывается минута запуска команды. Это может быть значение от 0 до 59. Например, установка значения 0 приведет к запуску команды в начале часа.
Час (0-23)
Поле часа указывается в 24-часовом формате. Он определяет, в какой час дня выполняется команда. Например, установка значения 14 приведет к запуску команды в 14:00.
День месяца (1-31)
В этом поле указывается день месяца, в котором будет выполняться команда. Это может быть любое значение от 1 до 31, в зависимости от количества дней в месяце. Например, установка значения 1 будет запускать команду в первый день каждого месяца.
Месяц (1-12)
Поле месяца определяет, в каком месяце будет выполнена команда. Это может быть значение от 1 (январь) до 12 (декабрь). Например, установка значения 12 приведет к выполнению команды в декабре.
День недели (0-6)
В этом поле указывается день недели, в который должна выполняться команда. Это может быть значение от 0 (воскресенье) до 6 (суббота). Например, если установить значение 5, команда будет запускаться каждую пятницу.
Команда или сценарий
Наконец, в поле команды или сценария вы указываете, какое действие должно выполнить задание cron. Это может быть любая команда или путь к файлу сценария, который демон Cron выполнит в указанное время.
Специальные символы в синтаксисе Cron
Синтаксис Cron также поддерживает специальные символы для указания более сложных шаблонов планирования:
- Звездочка (*): обозначает «каждую» единицу времени. Например, «*» в поле часа означает «каждый час».
- Запятая (,): позволяет указать список значений. Например, «1,3,5» в поле day_of_week означает «выполняться в понедельник, среду и пятницу».
- Дефис (-): указывает диапазон значений. Например, «9-17» в поле часов означает «каждый час с 9:00 до 17:00».
- косая черта (/): указывает приращение. Например, «*/10» в поле минут означает «каждые 10 минут».
Помимо этого, задания cron имеют специальные строки быстрого доступа, которые могут заменять пять полей времени и даты. Эти ярлыки обеспечивают быстрый способ указать то же расписание, которое в противном случае потребовало бы числового представления.
- @reboot
Запускает указанную команду один раз при запуске.
- @yearly,
@annually Оба запускают указанную задачу каждый год в 00:00 1 января. Эквивалентно указанию «0 0 1 1 *»
- @monthly
Запускает задание раз в месяц 1-го числа в 00:00. Эквивалент «0 0 1 * *»
- @weekly
Запускает задание раз в неделю в 12:00 воскресенья. Эквивалент «0 0 * * 0»
- @daily,
@midnight Оба запускают задание cron каждый день в 00:00. Это эквивалентно указанию «0 0 * * *» в файле crontab.
- @hourly
Запускает задание в начале каждый час. Эквивалентно «0 * * * *»
Когда начинается задание Cron?
Система cron проверяет crontab каждую минуту. Он запускает задачи, когда установленное время (минуты, часы и месяцы) совпадает с фактическим временем. Также он проверяет день: если конкретное число в месяце или день недели совпадает с сегодняшним днем, значит, пора выполнить команду или скрипт.
Задания и пути Cron
Когда задание cron запускается, оно выполняется в ограниченной среде, что означает, что оно не наследует автоматически переменные или пути среды пользователя или системы. Это может привести к проблемам, когда задание cron завершается сбоем, поскольку он не может найти необходимые исполняемые файлы или сценарии из-за неопределенного или неправильного пути.
В свете этого вы можете явно установить переменную среды PATH в файле crontab для обработки путей в заданиях cron. Это сообщает демону cron, где искать исполняемые файлы. Например:
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
Добавление этой строки в начало файла crontab гарантирует, что все задания cron, указанные ниже, будут искать исполняемые файлы в этих каталогах.
Однако принимая во внимание лучшие практики, мы рекомендуем всегда указывать абсолютные пути ко всем исполняемым файлам и скриптам в вашем cron. задания, чтобы избежать двусмысленности и потенциальных ошибок.
Кроме того, прежде чем полагаться на автоматическое выполнение, запустите свои сценарии или команды вручную, используя те же пути и настройки среды, которые определены в вашем crontab, чтобы убедиться, что они работают должным образом.
Настройка и управление заданиями Cron
Ладно, оставим теорию. Вы обладаете всеми необходимыми знаниями о том, как функционируют задания cron и их компоненты. Пришло время погрузиться в самую захватывающую часть: создание задачи cron.
Создать задание Cron пользователя
Чтобы создать или отредактировать файл crontab вашего пользователя, используйте следующую команду в терминале:
crontab -e
Это стандартный способ создания и редактирования заданий cron. При выполнении он редактирует задания cron для пользователя, который запускает команду, открывая файл crontab вашего пользователя в текстовом редакторе по умолчанию, установленном для вашей системы, например Vi, Nano или другом.
Если вы используете эту команду впервые, вам может быть предложено выбрать редактор, прежде чем продолжить.
Затем, чтобы добавить задание cron, просто добавьте новую строку в файл crontab, следуя синтаксису, описанному выше. Например, мы запланируем запуск сценария резервного копирования «backup.sh», расположенного в домашнем каталоге нашего пользователя, ежедневно в 3:00 утра, добавив следующую строку:
0 3 * * * /home/linuxiac/backup.sh
Многочисленные строки с префиксом «#» и, таким образом, закомментированные в начале файла, служат краткими инструкциями по настройке задания cron. Введите после них свой, как показано на изображении выше.
Далее сохраните и выйдите из редактора. Помните, что служба Cron автоматически проверяет наличие изменений в файлах crontab и применяет их соответствующим образом, поэтому вам не нужно перезапускать ее после внесения изменений.
В заключение стоит отметить, что использование crontab -e
дает дополнительное преимущество, заключающееся в автоматической проверке синтаксиса при сохранении и выходе из файла. Cron будет предупреждать вас о любых обнаруженных ошибках, обеспечивая ценную защиту от случайного ввода недействительных заданий cron.
Создайте общесистемное задание Cron
Поскольку crontab -e
ориентирован на отдельные пользовательские crontab, он не предназначен для общесистемных изменений конфигурации Cron, которые могут потребоваться для определенных административных задач.
В этом случае прямое редактирование файла «/etc/crontab» предоставит вам общесистемные возможности crontab. В отличие от crontab, предназначенного для конкретного пользователя, этот файл может включать общесистемные задачи и поддерживает указание пользователя для каждой задачи, обеспечивая гибкость для запуска команд под разными учетными записями пользователей.
Например, давайте создадим общесистемное задание cron, которое удалит все файлы с расширением «.log» из каталога «/var/log/myservice» по адресу 2. :00 утра.
Для этого мы сначала открываем файл «/etc/crontab» в предпочитаемом нами редакторе терминала:
sudo vim /etc/crontab
Затем мы вводим задание cron, которое выглядит следующим образом:
0 2 * * * root /usr/bin/find /var/log/myservice -type f -name '*.log' -delete
Что отличает это от пользовательских заданий cron, так это включение дополнительного столбца после начальных пятикратных полей. В этом столбце можно указать учетную запись пользователя, под которой будет выполняться задание — в данном случае root.
Однако прямое редактирование файла «/etc/crontab» имеет два основных недостатка. Во-первых, этот подход не обеспечивает проверку синтаксиса, что увеличивает риск ошибок.
Во-вторых, потому что «/etc/crontab» влияет на всю систему; неправильные записи могут иметь серьезные последствия, потенциально влияя на стабильность и безопасность системы. Поэтому используйте его с осторожностью.
Перечисление пользовательских заданий Cron
Чтобы убедиться, что ваши задания cron запланированы правильно, вы можете отобразить содержимое файла crontab вашего пользователя, используя:
crontab -l
Эта команда перечисляет все задания cron, запланированные для вашего пользователя, что позволяет вам проверить или просмотреть задачи, поставленные для запуска.
Перечисление общесистемных заданий Cron
Как мы уже знаем, общесистемные задания cron хранятся в разных местах и не указаны в crontab пользователя. Чтобы составить список общесистемных заданий cron, вам необходимо просмотреть файл «/etc/crontab» и каталоги «/etc/cron.d/», « /etc/cron.daily/», «/etc/cron.hourly/», «/etc/cron.weekly/», и «/etc/cron.monthly/».
Вы можете просмотреть эти файлы с помощью команды cat
или любого текстового редактора. Например:
sudo cat /etc/crontab
Чтобы просмотреть содержимое каталогов, например «/etc/cron.daily», используйте:
ls /etc/cron.daily/
Список заданий Cron для других пользователей
Если у вас есть права суперпользователя (root), вы можете составить список заданий cron для любого пользователя в системе, используя команду crontab с параметром «-u», за которым следует имя пользователя и «- л». Например, чтобы получить список заданий cron для пользователя с именем «bobby», вы должны запустить:
sudo crontab -u bobby -l
Эта команда удобна для системных администраторов, управляющих заданиями cron для нескольких учетных записей пользователей.
Редактирование заданий Cron
Чтобы отредактировать задание cron, аналогично его созданию, используйте следующую команду, чтобы открыть файл crontab текущего пользователя в редакторе по умолчанию:
crontab -e
Открыв файл crontab, перейдите к строке, содержащей задание cron, которое вы хотите отредактировать, и при необходимости измените расписание или команду, затем сохраните и выйдите из файла.
Если вам нужно отредактировать файл crontab другого пользователя (при условии, что у вас есть необходимые разрешения), например пользователя «bobby», используйте:
sudo crontab -u bobby -e
Удаление задания Cron
В зависимости от вашей цели у вас есть несколько способов удаления задания cron. Чтобы удалить только определенное задание, используйте команду crontab -e
, чтобы открыть файл crontab.
Оттуда перейдите к строке, представляющей задание, которое вы хотите удалить. Удалите эту строку, удалив ее полностью. В то же время будьте осторожны, чтобы все остальные линии оставались неизменными. После этого сохраните изменения и выйдите из редактора.
Однако если вы хотите удалить все запланированные задания cron для пользователя, вы можете удалить файл crontab пользователя. Это действие удалит все запланированные задачи, поэтому его следует выполнять осторожно.
Откройте терминал и введите команду, показанную ниже:
crontab -r
Это приведет к удалению файла crontab текущего пользователя без запроса подтверждения, поэтому убедитесь, что вы хотите продолжить, прежде чем выполнять его.
Если вы предпочитаете получить запрос на подтверждение перед удалением, используйте команду crontab -i
, а затем -r
. Перед удалением файла crontab будет запрошено подтверждение.
Шпаргалка по Crontab
В таблице ниже кратко изложены ключевые моменты, обсуждавшиеся выше в отношении основных параметров команды crontab.
- crontab -e
Отредактируйте файл crontab или создайте его, если он еще не существует.
- crontab -l
В сочетании с дополнительными опциями эта функция позволяет изменять или просматривать файл crontab пользователя — возможность, предназначенная исключительно для пользователей с правами администратора.
- crontab -r
Удалите весь файл crontab.
- crontab -u user
В сочетании с дополнительными опциями эта функция позволяет изменять или просматривать файл crontab пользователя — возможность, предназначенная исключительно для пользователей с правами администратора.
Как устранить неполадки с заданиями Cron
К сожалению, когда задание cron не запускается, это может быть неприятно и потенциально проблематично, в зависимости от задачи. Итак, вот несколько основных рекомендаций по выяснению причины этого.
Первым шагом в устранении неполадок является проверка правильности определения задания cron. Убедитесь, что каждое поле указано правильно в соответствии с вашими требованиями. Распространенной ошибкой является неверный синтаксис или непонимание того, как cron интерпретирует специальные символы и диапазоны.
Затем убедитесь, что в вашей системе запущен демон Cron. Вы можете проверить это, выполнив команду типа:
sudo systemctl status cron
Убедитесь, что сценарий или команда, которую пытается запустить задание cron, имеет соответствующие разрешения и что вы используете абсолютные пути. Задания Cron выполняются в ограниченной среде с минимальным определением PATH, поэтому крайне важно указывать полный путь к любой команде или сценарию.
Кроме того, файл должен быть исполняемым и доступным для пользователя, под именем которого запланировано задание cron. Попробуйте запустить команду или сценарий вручную из командной строки, используя ту же учетную запись пользователя, которую использует задание cron.
Это поможет вам убедиться, что команда работает должным образом без среды cron. Если команда завершится неудачно, вы поймете, что проблема связана с командой или сценарием, а не с cron.
Помните, что задания cron выполняются в неинтерактивной среде оболочки без входа в систему, а это означает, что они могут не иметь доступа к тем же переменным среды, что и при запуске команд вручную.
Если ваш сценарий использует переменные среды, вам может потребоваться явно установить их в начале вашего сценария или в определении задания cron.
Примеры заданий Cron
Наконец, мы представим несколько примеров заданий cron, которые охватывают почти все потенциальные синтаксические ситуации Cron. Считайте их основой для создания собственных.
- * * * * *
Запускайте задание cron каждую минуту.
- 0 * * * *
Запускайте задание cron каждый час.
- 0 0 * * *
Запускайте задание cron каждый день в полночь.
- 0 2 * * *
Запускайте задание cron каждый день в 2 часа ночи.
- 0 0 15 * *
Запускайте задание cron каждые 15 числа месяца в полночь.
- 0 0 * * 6
Запускайте задание cron каждую субботу в полночь.
- 0 15 * * 1-5
Запускайте задание cron ежедневно в 15:00 с понедельника по пятницу.
- */5 * * * *
Запускайте задание cron каждые 5 минут.
- 0 8-16 * * *
Выполняйте задание cron ежедневно, ежечасно, ровно с 8:00 до 16:00.
- 0 4 * * 2,4
Запускайте задание cron в 4 утра во вторник и четверг.
- @reboot
Запустите задание cron при запуске системы.
Кроме того, онлайн-инструменты, такие как этот, этот или этот, предлагают надежные веб-интерфейсы для настройки задач cron.
Лучшие практики и советы
- Проверьте свои сценарии вручную, прежде чем планировать их выполнение с помощью Cron, чтобы убедиться, что они работают должным образом.
- Используйте абсолютные пути для команд и сценариев в файле crontab, чтобы избежать проблем с путями.
- Перенаправить выходные данные в файл или по электронной почте, чтобы записать любые выходные данные или ошибки для устранения неполадок («команда > /path/to/logfile 2>&1»). Таким образом, вы можете просмотреть файл журнала на наличие каких-либо проблем.
- Учитывайте нагрузку на систему при планировании заданий, особенно если они ресурсоемки или если на одно и то же время запланировано много заданий.
Заключение
Задания Cron необходимы для системного администрирования Linux. Они предлагают надежный и универсальный инструмент для планирования и автоматизации задач.
Его красота заключается в универсальности и точности. От простых команд, выполняемых с минутными интервалами, до сложных сценариев, запланированных на определенные даты и время, cron адаптируется ко многим требованиям.
Благодаря наличию пользовательских и общесистемных файлов crontab наряду с каталогами, предназначенными для периодических задач, задания cron предоставляют отдельным пользователям и системным администраторам гибкость в адаптации планирования задач к их конкретным потребностям.
Используя идеи и примеры из этой статьи, вы уже на пути к успеху в планировании, повышении производительности и открытии новых возможностей в своем путешествии по Linux.
Дополнительную информацию можно найти на страницах руководства cron и crontab, где содержится подробная информация и пояснения о том, как работает система cron.
Спасибо за ваше время! Ваши отзывы и комментарии, как всегда, приветствуются.