Как запускать запланированные задачи в среде unix linux
Обновлено: 21.11.2024
В этой статье мы рассмотрим и посмотрим, как мы можем планировать и запускать задачи в фоновом режиме автоматически через равные промежутки времени с помощью команды Crontab.
Работа с частыми заданиями вручную — сложная задача для системных администраторов, и такие задачи можно планировать и запускать автоматически в фоновом режиме без вмешательства человека с помощью демона cron в Linux или Unix-подобных операционных системах.
Например, вы можете автоматизировать резервное копирование системы Linux, планировать обновления и синхронизацию файлов и многое другое с помощью демона Cron, который используется для запуска запланированных задач из командной строки или с помощью онлайн-инструментов для создания заданий cron.
Cron просыпается каждую минуту и проверяет расписание задач в исчисляемом количестве — Crontab (CRON TABle) — это таблица, в которой мы можем планировать такие виды повторяющихся задач.
Советы. У каждого пользователя может быть собственный crontab для создания, изменения и удаления задач. По умолчанию cron включен для пользователей, однако мы можем ограничить пользователей, добавив запись в файл /etc/cron.deny.
Файл Crontab состоит из команды в строке и фактически имеет шесть полей, разделенных пробелом или табуляцией. Первые пять полей представляют время для выполнения задач, а последнее поле — для команды.
- Минуты (удерживайте значения от 0 до 59)
- Час (удерживайте значения от 0 до 23)
- День месяца (удерживайте значения от 1 до 31)
- Месяц года (удерживайте значения от 1 до 12 или январь-декабрь, вы можете использовать первые три буквы названия каждого месяца, например, январь или июнь).
- День недели (удерживайте значения от 0 до 6 или вс-сб. Здесь также можно использовать первые три буквы названия каждого дня, например, вс или ср.)
- Команда — /путь/к/команде или сценарию, который вы хотите запланировать.
1. Список записей Crontab
Просмотр или управление задачами с помощью команды crontab с параметром -l для текущего пользователя.
2. Редактировать записи Crontab
Чтобы отредактировать запись crontab, используйте параметр -e, как показано ниже. В приведенном ниже примере будут открыты запланированные задания в редакторе VI. Внесите необходимые изменения и прекратите нажимать клавиши :wq, которые автоматически сохранят настройки.
3. Список запланированных заданий Cron
Чтобы получить список запланированных заданий определенного пользователя с именем tecmint, используйте опции -u (пользователь) и -l (список).
Примечание. Только пользователь root имеет полные права на просмотр записей crontab других пользователей. Обычные пользователи не могут просматривать других.
4. Удалить запись Crontab
Внимание: Crontab с параметром -r удалит завершенные запланированные задания без подтверждения из crontab. Используйте параметр -i перед удалением пользовательского crontab.
5. Запрос перед удалением Crontab
crontab с опцией -i запросит у пользователя подтверждение перед удалением пользовательского crontab.
- Звездочка (*) — соответствие всем значениям в поле или любому возможному значению.
- Дефис(-) – для определения диапазона.
- Косая черта (/) — 1-е поле /10 означает каждые десять минут или увеличение диапазона.
- Запятая (,) — для разделения элементов.
7. Общесистемное расписание Cron
Системный администратор может использовать предопределенный каталог cron, как показано ниже.
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
8. Запланировать работу на определенное время
Следующие задания удаляют пустые файлы и каталоги из /tmp ежедневно в 00:30. Вам нужно указать имя пользователя для выполнения команды crontab. В приведенном ниже примере пользователь root выполняет задание cron.
9. Специальные строки для общего расписания
Строки | Значения |
---|---|
@reboot | Команда будет запускаться при перезагрузке системы. |
@daily | Один раз в день или может использовать @midnight. |
@weekly | Один раз в неделю. |
@yearly | Один раз в год. мы также можем использовать ключевое слово @annually. |
Необходимо заменить пять полей команды cron ключевыми словами, если вы хотите использовать то же самое.
10. Несколько команд с двойным амперсандом (&&)
В приведенном ниже примере команды command1 и command2 выполняются ежедневно.
11. Отключить уведомление по электронной почте.
По умолчанию cron отправляет почту на учетную запись пользователя, выполняющего cronjob. Если вы хотите отключить его, добавьте задание cron, как в приведенном ниже примере. Использование опции >/dev/null 2>&1 в конце файла перенаправит весь вывод результатов cron в /dev/null.
вывод: автоматизация задач может помочь нам выполнять их лучше, без ошибок и эффективно. Вы можете обратиться к странице руководства crontab для получения дополнительной информации, введя команду «man crontab» в своем терминале.
Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения? обратитесь за помощью в разделе комментариев.
Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:
TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.
Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.
Мы благодарны за вашу бесконечную поддержку.
Похожие сообщения
50 мыслей о «11 примерах задач планирования Cron в Linux»
Почему моя команда не работает?
(программа onedrive в обычной команде работает хорошо)
Вы не указали время выполнения в своих операторах crontab.
Звездочка (*) означает все значения.
Можете ли вы привести несколько примеров того, что системные администраторы Linux автоматизируют с помощью Crontab?
У меня есть два набора заданий: одно для вывода первых двух строк df -H , а другое для вывода времени безотказной работы в журнал. Оба для ведения исторических записей, но я изо всех сил пытаюсь найти вещи, которые *должны* быть автоматизированы.
01 1 1 * * df -H | head -n 2 >> /var/log/df.log 2>&1
01 3 1 * * uptime >> /var/log/uptime.log 2>&1
Я понимаю, что это всегда будет контекстуально связано с тем, что должно происходить в вашей среде, а моя среда — это среда человека, изучающего администрирование Linux.
Я просто учусь на примере и ничего не понимаю.
Здравствуйте, пользователи, это очень хороший веб-сайт для создания команды crontab в течение нескольких секунд с вашим расписанием,
Пожалуйста, просмотрите его и дайте мне знать, если у вас возникнут вопросы.
Здравствуйте, пользователи, это очень хороший веб-сайт для создания команды crontab в течение нескольких секунд с вашим расписанием,
Все зависит от времени с помощью cron, демона планирования. Cron позволяет системным администраторам легко и точно планировать и автоматизировать задачи, выполняемые по сценарию.
Опубликовано: 13 сентября 2019 г. | Кен Хесс (Red Hat)
Самых привередливых системных администраторов может удивить отсутствие команды cron в Linux. Демон cron ( crond ) — это управляемый системой исполняемый файл, работающий в памяти, с помощью которого пользователи могут планировать задачи. Пользовательская команда для работы со службой cron — crontab (cron table). Файл crontab — это простой текстовый файл, который указывает демону cron выполнять задачу в определенное время или с определенным интервалом. Любой пользователь может планировать задачи или задания cron в системе. Задача запускается под учетной записью пользователя, под которым она была создана. Другими словами, если вы создаете задачу cron, она запускается с разрешениями вашей учетной записи пользователя. То же самое верно для любого пользователя в системе, включая пользователя root.
Использование cron
Вы можете ввести команду man crontab, чтобы просмотреть все возможные варианты, но обычно для большинства пользователей подходят два: -l (список) и -e (редактирование).
Чтобы просмотреть список настроенных задач cron, используйте:
У меня пока нет запущенных задач cron. Чтобы создать его, мне нужно отредактировать файл crontab:
Примечание. При создании записи в crontab не требуется никакого имени файла или обозначения. У каждого пользователя есть только один файл crontab, и вы добавляете в него все задачи.
Дополнительные ресурсы по Linux
В редакторе crontab нет ничего особенного, за исключением того, что если у вас нет определенного редактора, определенного с помощью переменной среды VISUAL или EDITOR, то ваш редактор, вероятно, либо vi, либо vim .
Примечание. Если вы не знаете, как использовать vi или vim , обратитесь к моей статье Введение в редактор vi.
Нажмите клавишу I, чтобы войти в режим INSERT и начать настройку записи crontab. Файл crontab имеет особый синтаксис. См. изображение ниже:
Как заставить это работать
Как видно из изображения, расположение ваших записей имеет значение, а записи разделены пробелами. Звездочка (*) означает каждый или все, например, каждую минуту или все часы, каждый день и т. д. Другими словами, изображение в настоящее время иллюстрирует запись crontab для сценария, который будет выполняться каждую минуту каждого дня. Эта практика, хотя и редкая, все же существует в некоторых случаях. Однако для большинства задач cron вам потребуется быть более конкретным.
Примечание. Перед настройкой задачи cron запустите сценарий или команду, чтобы проверить, есть ли у вас проблемы с разрешениями или путями.
Рекомендуется указать полный путь к любому исполняемому файлу внутри скрипта. Точно так же вы также должны указать полный путь к исполняемым файлам или сценариям в своих записях crontab.
Например, если у вас есть сценарий, который должен создавать файл с помощью команды dmesg один раз в день в 13:00, ваша запись будет выглядеть следующим образом:
И если вы хотите отправить этот файл себе по электронной почте, вы можете добавить дополнительную запись в свой crontab:
Сохраните файл, выйдя из него, как если бы вы вышли из vi или редактора по умолчанию. Вам не нужно делать ничего особенного, чтобы включить этот отредактированный crontab. Демон cron автоматически проверяет наличие записей в каталоге /var/spool/cron. Например, мой crontab называется /var/spool/cron/khess и содержит две указанные выше записи.
Демон cron запускается от имени пользователя root, поэтому он может читать содержимое каталога, поскольку доступ к этому каталогу есть только у пользователя root. Было бы серьезным нарушением безопасности, если бы другие пользователи получили доступ к /var/spool/cron и прочитали записи crontab для других пользователей в системе.
Еще примеры
Для следующих примеров предположим, что у вас есть сценарий backup.sh , который вы хотите запланировать в своей системе. Вы поместили все свои системные скрипты в /etc/scripts , каталог, доступ к которому есть только у root.
Чтобы запланировать выполнение сценария резервного копирования каждую ночь в 2 часа ночи, откройте crontab пользователя root:
затем введите следующее:
Сохраните и закройте файл.
Давайте попробуем что-нибудь более сложное. Запланируйте запуск сценария резервного копирования в 2 часа ночи каждый понедельник. Теперь, как выглядит запись crontab? Обратитесь к изображению синтаксиса crontab за подсказками:
1 в пятом столбце указывает cron запустить этот скрипт в понедельник.
Вместо того, чтобы запускать специальный сценарий резервного копирования каждый понедельник, запускайте его 15-го числа каждого месяца:
Что делать, если сценарий резервного копирования создает резервную копию только одного критически важного каталога? Вы хотите, чтобы содержимое этого каталога копировалось каждые 15 минут. Вот как это будет выглядеть, что не на 100 % интуитивно понятно:
Традиционный метод установки расписания каждые 15 минут выглядит следующим образом:
Точно так же, если вы хотите запускать скрипт только с понедельника по пятницу, ваша запись изменится на:
Как видите, планировать cron легко, если вы понимаете синтаксис. Единственные реальные камни преткновения, с которыми вы можете столкнуться при работе с cron, — это путь, разрешения и время. Вы должны подумать о том, сколько времени требуется сценарию для выполнения и получения вывода, прежде чем планировать другой процесс, который зависит от него. Возвращаясь к сценарию dmesg, вы можете видеть, что вам нужно знать, сколько времени требуется команде dmesg для завершения обработки и записи в файл dmesg.txt, прежде чем запланировать следующую команду, которая должна отправить файл dmesg.txt вам по электронной почте.
Подведение итогов
Обычно системные администраторы и другие пользователи автоматизируют процессы в системе Linux, создавая сценарии, которые выполняют такие функции, как создание файлов, перемещение файлов, отправка информации по электронной почте, создание резервных копий, создание отчетов о резервных копиях и т. д. скрипты в cron, вы создали настоящую автоматизацию в своей системе. Существует очень мало повторяющихся задач, которые нельзя автоматизировать с помощью cron и скриптов. Если у вас возникли проблемы с автоматизацией задач, требующих паролей или интерактивных сеансов, используйте сценарии ожидания для их автоматизации. Если вы не знаете expect , смотрите Включить системного администратора для будущих сообщений по этой теме.
Помимо cron, в Linux есть и другие способы автоматизации. Например, команду at можно использовать для запуска задания в определенное время.Вы также можете настроить выполнение задач в определенное время с помощью systemd, используя систему таймеров systemd.
[Хотите попробовать Red Hat Enterprise Linux? Загрузите его сейчас бесплатно.]
- Если у вас есть программа, которая использует много ресурсов компьютера, вы можете захотеть, чтобы она запускалась в то время, когда вы не будете использовать компьютер.
- Для выполнения задач по обслуживанию системы, таких как создание резервных копий или сканирование файловой системы на наличие вирусов или других угроз безопасности.
В Unix есть средство для запуска запланированных задач, называемое cron, но пользователи запускают cron напрямую. Он всегда работает в фоновом режиме для запуска запланированных команд в нужное время. Мы называем системные программы, такие как cron, которые работают в фоновом режиме демоны.
Вывод любых запланированных команд по умолчанию отправляется пользователю в сообщении электронной почты. Если это нежелательно, то при планировании команды перенаправьте вывод команды в файл или в предоставленную системой корзину ( /dev/null ).
Если вы получили сообщение электронной почты от демона cron, вы можете попробовать использовать mutt, чтобы прочитать сообщение.
Программы, которые пользователи используют для планирования программ, — это crontab и at.
3.7.1. кронтаб¶
crontab [-u пользователь] [файл]
crontab [-u пользователь] -l | -r [-i] | -е
Кронтаб — это программа, используемая для установки, удаления или составления списка таблиц, используемых для управления демоном cron для выполнения команд по повторяющемуся расписанию.
Первое использование — это установка расписания команд из файла. или из стандартного ввода. Если параметры не указаны, считывается из стандартного ввода.
-u user ¶Укажите, расписание какого пользователя нужно настроить (только для root). По умолчанию для вашей учетной записи.
-l ¶Вывести список текущих запланированных команд
-r ¶Удалить текущие запланированные команды
-i ¶Запросить пользователя для подтверждения удаления запланированных команд
-e ¶Редактировать список запланированных команд. После сохранения временного файла и выхода из редактора команды, введенные в файл, планируются. По умолчанию используется редактор vi. Если вы хотите использовать другой редактор, например nano, установите переменную среды EDITOR:
формат файла crontab
- Каждая запланированная команда должна находиться в одной строке файла.
- Файл должен содержать 6 полей, разделенных пробелами.
- Первые пять полей указывают, когда должна выполняться команда (минута, час, день, месяц, день недели). Подстановочный знак (*) может использоваться для указания каждого экземпляра. [1] Для любого поля можно использовать конкретное значение времени, список значений времени или диапазон значений времени.
- Часы указаны в 24-часовом формате (0–23).
- Действительные значения дня недели: от 0 до 7. Воскресенье — от 0 до 7. С понедельника по субботу — от 1 до 6.
3.7.2. в¶
Команда at используется для планирования однократного запуска команды.
-r job ¶Удалить запланированные задания, идентифицируемые по номеру задания. Это то же самое, что и запуск задания atrm
-l ¶Список запланированных заданий
ВРЕМЯ ¶ВРЕМЯ — очень гибкая спецификация того, когда должна выполняться команда . Примеры смотрите в учебнике. at затем считывает из стандартного ввода список команд, которые нужно запустить в это время. Введите символ EOF ( Cntrl-d ), когда закончите вводить команды.
ромказ / Getty Images
Если вы хотите, чтобы команды или скрипты запускались в определенное время, вам не нужно сидеть с пальцами над клавиатурой, ожидая нажатия клавиши ввода, или даже находиться за столом в нужное время. Вместо этого вы можете настроить выполнение задачи с помощью команды at. В этом посте мы рассмотрим, как задачи планируются с помощью at, как можно точно выбрать время запуска процесса и как просмотреть, что было запланировано для запуска с помощью at.
в хронометре
Для тех, кто планирует задачи в системах Linux с помощью cron, команда at похожа на cron в том смысле, что вы можете планировать выполнение задач в выбранное время, но cron используется для заданий, которые выполняются периодически, даже если значит только раз в год. Большинство заданий cron настроены на выполнение ежедневно, еженедельно или ежемесячно, хотя вы сами определяете, как часто и когда.
Команда at, с другой стороны, используется для задач, которые запускаются только один раз. Хотите перезагрузить свою систему сегодня в полночь? Нет проблем, at может сделать это за вас, если у вас есть соответствующие разрешения. Если вы хотите, чтобы система перезагружалась каждую субботу в 2 часа ночи, используйте вместо этого cron.
Использование в
Команду at легко использовать, и нужно запомнить всего несколько моментов. Простое использование at может выглядеть так:
После ввода «at» и времени, когда должна быть запущена команда, at предложит вам выполнить команду (в данном случае — команду даты). Введите ^D, чтобы завершить запрос.
Предполагая, что мы настроили это по команде до 17:00, дата и время будут добавлены в конец файла с именем «thisfile» позже в тот же день. В противном случае команда будет запущена в 17:00. на следующий день.
Вы можете ввести более одной команды при взаимодействии с командой at. Если вы хотите, чтобы несколько команд запускались одновременно, просто укажите более одной командной строки:
В приведенных выше командах мы используем учетную запись обычного пользователя и добавляем простой текст в файл в домашнем каталоге этого пользователя. Если эта команда запущена после 6:22, она будет запущена на следующий день, потому что 6:22 означает 6:22. Если вы хотите, чтобы она выполнялась в 18:22, либо используйте 18:22. или 18:22. «18:22» также работает.
Вы можете использовать at, чтобы запланировать выполнение команд на определенные даты, либо указав даты, либо указав дату и время, например «10:00 утра 15 апреля 2021 года» или «полдень + 5 дней» (запускать в полдень через пять дней после сегодняшнего дня). . Вот несколько примеров:
После того, как вы укажете команду для запуска и нажмете ^D, вы заметите, что команда at присвоила каждому запросу номер задания. Этот номер будет отображаться в очереди заданий команды at.
Проверка очереди
Вы можете просмотреть очередь заданий at с помощью команды atq (at queue):
Если вам нужно отменить одно из заданий в очереди, используйте команду atrm (at remove) вместе с номером задания.
Вы можете просмотреть сведения о запланированной задаче с помощью команды at -c. Дополнительные сведения (активный путь поиска и т. д.) также доступны, но нижние строки вывода покажут вам, какая команда была запланирована для выполнения.
Обратите внимание, что показанная команда начинается с проверки возможности входа в каталог пользователя с помощью команды cd. Если это не так, задание завершится с ошибкой. В противном случае будет запущена команда, указанная при вводе команды at. Прочитайте команду как «перейти в /home/shs ИЛИ выйти с показанной ошибкой».
Запуск заданий от имени root
Чтобы запускать задания от имени пользователя root, просто используйте sudo с командой at следующим образом:
Обратите внимание, что корневая задача отображается в очереди с root как тот, кто ее выполняет.
Запуск скриптов
Вы также можете использовать команду at для запуска скриптов. Вот пример:
Запрет использования команды at
Файл /etc/at.deny позволяет запретить пользователям использовать команду at. По умолчанию он, вероятно, будет включать список запрещенных учетных записей, таких как ftp и none. Файл /etc/at.allow можно использовать для противоположного действия, но обычно настраивается только файл at.deny.
Подведение итогов
Команда at очень универсальна и проста в использовании, когда вы хотите запланировать одноразовую задачу, даже если вы хотите, чтобы она выполнялась сегодня днем или через несколько лет.
Присоединяйтесь к сообществам Network World на Facebook и LinkedIn, чтобы комментировать самые важные темы.
Сандра Генри-Стокер занимается администрированием систем Unix более 30 лет. Она описывает себя как «USL» (Unix как второй язык), но помнит достаточно английского, чтобы писать книги и покупать продукты. Она живет в горах в Вирджинии, где, когда не работает с Unix и не пишет о ней, отгоняет медведей от своих кормушек для птиц.
Читайте также: