Как планировать задачи в Linux с помощью Cron и Crontab

Как планировать задачи в Linux с помощью Cron и Crontab

Вы знали, что Бегущий по лезвию установлен в 2019 году? Это через три года! Не считая Назад в будущее 2 , где они переносятся во времени в 2015 год. Но у нас нет летающих машин и среди нас нет репликантов (насколько мне известно).





Легко разочароваться в современных технологиях, когда мы сравниваем их с вымышленными изображениями будущего. Тем не менее, в наши дни наши телефоны, компьютеры и даже дома могут творить удивительные вещи. Возможность автоматизировать задачи - одна из них.





Каждый пользователь Linux может извлечь выгоду из планирования задач, независимо от того, связаны ли они с системой (например, очистка старых журналов и обновление пакетов ) или обслуживания пользователя (проверка электронной почты, загрузка подкастов ...). У пользователей Windows есть планировщик задач с Windows 95. Утилита, которая выполняет ту же работу в Linux, называется cron, и здесь мы объясним, как ее использовать.





почему использование диска на 100

Что такое Cron?

Cron - это системная служба, которая работает в фоновом режиме, проверяет наличие запланированных задач и выполняет их, если обнаруживает. Задачи, также называемые «заданиями cron», определяются в специальных файлах конфигурации (crontabs), которые cron сканирует каждую минуту. Несколько версий cron можно найти в разных дистрибутивах Linux. Например, вилка cron в Fedora называется приятель , а также есть fcron , bcron , а также dcron . У некоторых есть дополнительные функции, в то время как другие больше ориентированы на безопасность, но все они основаны на одной идее.

Это руководство написано для vixie-cron, наиболее распространенной версии cron, которую вы найдете в Ubuntu и ее производных. Хотя большинство инструкций применимо и к другим реализациям cron, могут быть незначительные отличия, поэтому проверьте их руководства, если вы решите переключиться.



Что такое Crontab?

Если вы серьезно относитесь к управлению своим временем, у вас, вероятно, есть какой-то календарь - приложение или, по крайней мере, лист бумаги. Crontab очень похож на календарь вашего компьютера. Он содержит информацию о запланированных задачах, сообщая cron, какие команды в какое время запускать.

Фактически, в вашей системе есть несколько crontab. У каждого пользователя есть свой crontab, включая root (администратора). Пользовательские crontab хранятся в





/var/spool/cron/crontabs/

. В

crontab -l

команда выведет список файла crontab для текущего пользователя. Вы можете проверить корневой crontab с помощью





sudo crontab -l

.

Кроме того, есть системный файл crontab

/etc/crontab

который используется для общесистемных задач. Обычно они представляют собой исполняемые скрипты, принадлежащие root, размещенные в

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, а также

/etc/cron.monthly/

папки, а в некоторых дистрибутивах

/etc/cron.d/

папка тоже. Вообще говоря, вам не придется заниматься этими задачами, поскольку большинство из них создаются автоматически установленными приложениями.

Как планировать задачи с помощью Cron

Звучит просто: чтобы запланировать задачи, просто добавьте их в свой crontab. Поскольку crontab - это специальный файл конфигурации, не рекомендуется редактировать его вручную. Вместо этого используйте

crontab -e

команда. Чтобы отредактировать crontab root или других пользователей, запустите команду с правами администратора и добавьте их имя пользователя после параметра -u:

sudo crontab -u root -e
sudo crontab -u username -e

Файл crontab состоит из двух разделов. Первый содержит переменные среды, которые устанавливаются автоматически. Вы можете безопасно изменять переменные PATH, HOME и SHELL, а также изменять переменную MAIL.

Вторая часть файла - это фактическое «расписание» с вашими запланированными задачами. Каждая задача занимает строку (строку) в таблице со столбцами, представляющими следующие значения:

Чтобы успешно планировать задачи, вам нужно немного узнать о синтаксисе crontab:

  • Числа должны быть целыми (целыми числами), и вы можете использовать звездочку (*) в любом из столбцов в качестве подстановочного знака, означающего «каждую минуту / день / месяц ...».
  • В столбце «День месяца» будьте осторожны, чтобы не установить дату, которая не встречается в месяце, указанном в столбце «Месяц» (например, 30 февраля).
  • Оба столбца «Месяц» и «День недели» принимают короткие названия месяцев и дней соответственно, и они нечувствительны к регистру.
  • В столбце «День недели» 0 и 7 обозначают воскресенье. Столбец «Час» требует формата «военное время» (24-часовой), но вы не можете использовать число 24 - вместо этого 0 означает 12 часов утра. Это связано с тем, что значения для минуты, часа и дня недели начинаются. на 0 вместо 1.
  • Секунды не поддерживаются, поэтому вы не можете запланировать задачу на определенную секунду.

Что вы можете сделать, так это запланировать инклюзивные временные диапазоны с помощью дефиса (14-22 в разделе «Часы» будет запускать задачу непрерывно с 14:00 до 22:00) или выполнить одну задачу несколько раз, указав список, разделенный запятыми (1, 3,5 в разделе «День недели» запустит задачу в понедельник, среду и пятницу).

Между тем, значения шага представлены косой чертой (/), и они указывают количество пропусков в пределах диапазона; например, 3-20 / 3 в разделе «Часы» будет запускать задачу каждые три часа с 3 утра до 8 вечера. Это полезно, если вы хотите повторять задачи каждые X часов, потому что вы можете комбинировать звездочку и шаг (* / X). Вы можете комбинировать диапазоны со списками, а шаги с диапазонами, если используете числа. Другими словами, комбинации типа «ян-мар» или «вт, пт-вс» не допускаются.

В качестве альтернативы, вместо того, чтобы устанавливать значение для каждого столбца, вы можете просто написать @weekly, @yearly, @monthly, @daily или @hourly в начале строки, а затем команду. При таком расписании задачи будут выполняться при первом возможном экземпляре, поэтому @weekly будет запускаться в полночь в первый день недели. Если вы хотите запустить задачу сразу же после перезапуска системы, используйте команду @reboot.

В этом примере мы запланировали резервное копирование каждый день на 08:20 и 20:20. Обои автоматически меняются каждые три дня в 19:00, а скрипт будет проверять наличие новых подкастов каждый понедельник в 10:20 и 20:20. Напоминание о дне рождения установлено на 25 марта и запускается каждые 30 минут в течение указанного периода времени. Наконец, скрипт проверяет электронную почту каждые 15 минут с 8 до 20, но только в рабочие дни. Вы можете организовать свой crontab с пробелами и табуляциями между столбцами, но не внутри них (не помещайте пробелы между запятыми, дефисами и косыми чертами).

Если все это звучит слишком сложно, не волнуйтесь - вы всегда можете положиться на Интернет. Такие инструменты, как Генератор Crontab , Crontab.guru , а Corntab поможет вам создавать задания cron без знания синтаксиса crontab. Они показывают вам, когда задание будет выполняться следующим, и предоставляют шаблоны для часто используемых выражений. Crontab.guru - лучший из всех, потому что он позволяет вам протестировать синтаксис crontab в реальном времени, так что вы можете сразу увидеть, как ваши изменения повлияют на расписание.

Как проверить, выполняются ли задания Cron

Cron должен тихо работать в фоновом режиме и позволять вам работать без помех, пока он выполняет ваши задачи. Но как убедиться, что он действительно работает?

Cron имеет встроенную функцию уведомления по электронной почте, но для этого требуется настроить хотя бы простой локальный почтовый сервер. Не многие домашние пользователи готовы настраивать это, и не многие дистрибутивы предоставляют это по умолчанию (например, Ubuntu не делает этого). Самый быстрый способ проверить cron - это просканировать системный журнал с помощью этой команды:

cat /var/log/syslog | grep -i cron

Параметр -i делает наш запрос нечувствительным к регистру. Возможно, что cron будет иметь собственный файл журнала где-нибудь в

/var/log/

, так что посмотрите туда, если эта команда не дает полезных результатов.

Если вам нужно сохранить вывод определенного задания cron, вы можете перенаправить его в файл. Укажите путь и имя файла в последнем столбце вашего crontab после команды, которую вы хотите запустить:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Использование одного символа> будет перезаписывать файл при каждом запуске команды. Чтобы избежать этого, используйте >> вместо этого - он добавляет вывод в существующий файл.

Что делать, если Cron не работает?

Может случиться так, что вы добавили некоторые задачи, проверили системные журналы и обнаружили, что они не выполняются должным образом. Вот некоторые вещи, которые следует учитывать - и соблюдать осторожность - при попытке решить проблему.

Служба cron запущена?

Как вы знаете, демон cron должен работать в фоновом режиме. Убедитесь, что это действительно так. Сервис называется crond или просто cron.

Для дистрибутивов, использующих systemd:

systemctl status cron

Для дистрибутивов, использующих Upstart:

service cron status

Если в вашем дистрибутиве используется «старый» подход к инициализации System V, перечислите все службы с помощью:

обновить windows xp до windows 7 бесплатно
initctl list

и посмотрите, есть ли в списке cron.

Вам вообще разрешено иметь файл crontab?

Проверьте свои

/etc

папка для файлов с именем

cron.allow

а также

cron.deny

. В Ubuntu ни того, ни другого не должно быть, что означает, что всем пользователям разрешено управлять заданиями cron. Однако если есть

как делать моды в майнкрафте
cron.allow

файл, он должен содержать ваше имя пользователя. И наоборот, если

cron.deny

файл существует, ваше имя пользователя не должно быть в нем. Оставив

cron.deny

пустой файл означает, что только root и пользователи, перечисленные в

cron.allow

могут иметь файлы crontab.

Правильно ли установлены ваши переменные?

Crontab автоматически устанавливает для переменной SHELL значение

/bin/sh

. Однако если твой любимый снаряд - рыба или bash, вы должны изменить переменную SHELL

. Точно так же переменная PATH по умолчанию содержит только несколько каталогов. Здесь crontab ищет команды Linux. Если ваше задание cron не запускается, это может быть связано с тем, что crontab не «видит» команду, которую вы использовали. Чтобы этого избежать, добавьте каталоги, содержащие команды, в переменную PATH, разделив их двоеточиями:

ПУТЬ = / opt / myapp / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin

Если вы не хотите редактировать это в своем crontab, вы можете определить эти переменные в скрипте, который хотите запустить как задание cron.

Правильно ли форматирование вашего crontab?

Синтаксис Crontab не совсем гладкий. Даже если вы проверите это с помощью онлайн-инструментов, упомянутых ранее, небольшая ошибка все равно может помешать cron выполнить ваши задания. Будьте осторожны:

  • добавить пустую строку в конец файла crontab
  • экранируйте знак% обратной косой чертой, если ваша команда включает его
  • пишите комментарии отдельными строками, начиная с #. Не пишите комментарии в той же строке, что и переменные среды, или рядом с командами задания cron.

Вам действительно нужно использовать терминал?

Точно нет. Пользователи KDE могут планировать задания cron с помощью KCron, доступного из Системные настройки> Планировщик заданий модуль. Благодаря простому интерфейсу, который позволяет вам выбирать и настраивать все несколькими щелчками мыши, KCron приятно использовать.

Если вы предпочитаете GNOME, тогда Расписание GNOME это для вас. Подход аналогичен, хотя интерфейс, как и следовало ожидать, немного отличается. Он предлагает расширенный режим для тонких модификаций и поставляется с апплетом панели, из которого вы можете напрямую управлять задачами.

Вы должны знать о других решениях, например Crontab-UI а также Миникрон . Они больше подходят для пользователей, которые управляют несколькими машинами и заданиями cron, и одна из их самых крутых функций - это веб-интерфейс.

Есть ли альтернативы Cron?

Хотя cron в значительной степени является стандартным планировщиком задач для Linux, он определенно не единственный. В по команде идеально подходит для быстрых одноразовых заданий, которые можно запланировать прямо из командной строки без специальных файлов конфигурации. Если вам нужно больше, есть GNUbatch , который вводит понятие зависимости. С помощью GNUbatch вы можете установить определенные условия для каждого задания или сделать запланированное задание зависимым от предыдущего. Нечто подобное можно достичь с помощью системные таймеры . Хотя они менее практичны в настройке, чем cron, таймеры systemd могут запоминать, если задача не выполнила свое расписание, когда компьютер был выключен, и запускать ее при следующем включении.

Это то, что cron не может сделать в одиночку. Таким образом, он подходит для серверов и компьютеров, которые постоянно работают, но не будет выполнять задание, которое было запланировано, когда компьютер был выключен. Это где анакрон вступает в игру. Технически это не альтернатива и не замена cron. Вместо этого anacron дополняет cron и должен использоваться вместе с ним, что имеет место во многих дистрибутивах Linux, включая продукты на основе Ubuntu и Ubuntu. Anacron регистрирует время последнего выполнения задачи и проверяет, были ли пропущены экземпляры, когда система была выключена. Он запустит их, когда вы снова включите компьютер, но каждая задача может выполняться только один раз в день.

Некоторые версии cron, например fcron, по умолчанию предлагают функции anacron. Опытные пользователи могут захотеть взглянуть на Hcron или SuperCron , которые вносят множество улучшений в базовые функции cron, но при этом довольно сложны в управлении.

А вы? Как вы организуете свои цифровые задачи? Какие задачи вы планируете в Linux? Делитесь своими историями и советами по использованию cron в комментариях.

Кредит изображения: доска расписания Гонсало Арагон через Shutterstock

Делиться Делиться Твитнуть Эл. адрес 12 видеосайтов, которые лучше, чем YouTube

Вот несколько видеосайтов, альтернативных YouTube. Каждый из них занимает свою нишу, но их стоит добавить в закладки.

Читать далее
Похожие темы
  • Linux
  • Linux
Об авторе Ивана Айседора Девчич(Опубликовано 24 статей)

Ивана Айседора - внештатный писатель и переводчик, любитель Linux и фанатка KDE. Она поддерживает и продвигает бесплатное программное обеспечение с открытым исходным кодом и всегда ищет свежие, инновационные приложения. Узнайте, как с нами связаться здесь .

Ещё от Ivana Isadora Devcic

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Нажмите здесь, чтобы подписаться
Категория Linux