Как планировать задания в Linux: команды At и Crontab

Эммет Дулани

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



  • Сделайте резервную копию файлов посреди ночи.
  • Загружайте большие файлы рано утром, когда система не загружена.
  • Отправляйте себе сообщения в качестве напоминаний о встречах.
  • Периодически анализируйте системные журналы и ищите любые аномальные действия.

Вы можете настроить эти задания с помощью at команда или crontab средство Linux.



Как запланировать разовые задания в Linux

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

Прежде чем попробовать at в Linux, вам необходимо знать, что следующие файлы конфигурации определяют, какие пользователи могут планировать задачи с помощью at команда:



  • /etc/at.allow содержит имена пользователей, которые могут использовать at команда для отправки вакансий.
  • /etc/at.deny содержит имена пользователей, которым запрещено использовать at команда для отправки вакансий.

Если этих файлов нет или вы обнаружите пустой /etc/at.deny файл, любой пользователь может отправлять задания с помощью at команда. По умолчанию в Linux пусто /etc/at.deny файл; когда используется это значение по умолчанию, любой может использовать at команда. Если вы не хотите, чтобы некоторые пользователи использовали at, просто укажите их имена в поле /etc/at.deny файл.

Чтобы использовать at для планирования одноразового задания в Linux для выполнения at позже выполните следующие действия:

  1. Запустите at команда с датой или временем, когда вы хотите, чтобы ваши команды были выполнены.

    Когда вы нажимаете Enter, at> появится запрос следующего вида:



    at>

    Этот метод - самый простой способ указать время, когда вы хотите выполнить одну или несколько команд; просто укажите время в 24-часовом формате. В этом случае вы хотите выполнить команды в 9:30 сегодня вечером (или завтра, если уже прошло 21:30). Однако вы можете указать время выполнения разными способами.

  2. В ps приглашения, введите команды, которые вы хотите выполнить, как если бы вы вводили в командной строке. После каждой команды нажимайте Enter и переходите к следующей команде.
  3. Когда вы закончите вводить команды, которые хотите выполнить, нажмите Ctrl + D, чтобы указать конец.

    Вот пример, показывающий, как выполнить at команда в будущем:

    После того, как вы нажмете Ctrl + D, atq команда отвечает at сообщение, номер задания, а также дату и время, когда задание будет выполнено.

Форматы для команды at на время выполнения
Командование Когда работа будет запущена
сейчас Немедленно
сейчас + 15 минут 15 минут от текущего времени
сейчас + 4 часа 4 часа от текущего времени
сейчас + 7 дней 7 дней с текущего времени
а потом Сегодня в полдень (или завтра, если уже после полудня)
сейчас в следующий час Ровно через 60 минут
сейчас на следующий день В то же время завтра
завтра в 17:00 В 17:00. завтра
в 16:45 В 16:45 сегодня (или завтра, если уже после 16:45)
at 3:00 28 декабря, 2018 28 декабря 2018 г., в 3:00 утра

После ввода одного или нескольких заданий можно просмотреть текущий список запланированных заданий с помощью a команда. Вывод этой команды выглядит примерно так:

atrm

Первое поле в каждой строке показывает номер задания - тот же номер, что и atrm Команда отображается, когда вы отправляете задание. Следующее поле показывает год, месяц, день и время исполнения. Последнее поле показывает задания, ожидающие выполнения в at очередь и имя пользователя.

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

cron

Эта команда удаляет задание 4, запланированное на 3:00 утра 28 декабря 2018 г.]

Когда задание выполняется, результат отправляется вам по почте. Введите mail в окне терминала, чтобы прочитать почту и просмотреть результаты своих заданий.

Как запланировать повторяющиеся задания в Linux

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

габапентин взаимодействует с витаминами

Вы планируете повторяющиеся задания, помещая информацию о задании в файл определенного формата и отправляя этот файл с cron команда. cron демон - crontab - проверяет информацию о задании каждую минуту и ​​выполняет повторяющиеся задания в указанное время. Поскольку /etc/cron.allow демон обрабатывает повторяющиеся задания, такие задания также называются cron вакансии.

Любой вывод из crontab задание отправляется пользователю, отправившему задание. (В отправленном файле информации о задании вы можете указать другого получателя для отправленных по почте выходных данных.)

Два файла конфигурации определяют, кто может планировать /etc/cron.deny вакансии в Linux с помощью crontab:

  • /etc/cron.allow содержит имена пользователей, которым разрешено использовать cron команда для отправки вакансий.
  • /etc/cron.deny содержит имена пользователей, которым запрещено использовать cron команда для отправки вакансий.

Если cron файл существует, только пользователи, перечисленные в этом файле, могут планировать cron рабочие места. Если бы только crontab файл существует, перечисленные в нем пользователи не могут запланировать myjob рабочие места. Если ни один файл не существует, установка Linux по умолчанию позволяет любому пользователю отправить * рабочие места.

Чтобы отправить jobinfo работа в Linux, выполните следующие действия:

  1. Подготовьте сценарий оболочки (или исполняемую программу на любом языке программирования), который может выполнять повторяющуюся задачу, которую вы хотите выполнить.

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

  2. Подготовьте текстовый файл с информацией о времени, когда вы хотите, чтобы сценарий или программа оболочки (из шага 1) выполнялись; затем отправьте этот файл, используя crontab.

    Вы можете отправить несколько повторяющихся заданий в одном файле. Каждая строка с информацией о времени выполнения задания имеет стандартный формат с шестью полями. Первые пять полей указывают, когда выполняется задание, а шестое и последующие поля составляют команду, которая выполняется. Вот строка, которая выполняет cron сценарий оболочки в домашнем каталоге пользователя в 5 минут после полуночи каждый день:

    cron

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

Формат времени выполнения в файлах crontab
Номер поля Значение поля Допустимый диапазон значений *
1 Минуты 0–59
два Час дня 0–23
3 День месяца 0–31
4 Месяц 1–12 (1 означает январь, 2 означает февраль и т. Д.) Или названия месяцев с использованием первых трех букв - январь, февраль, март, апр, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь.
5 День недели 0–6 (0 означает воскресенье, 1 означает понедельник и т. Д.) Или трехбуквенные сокращения дней недели - вс, пн, вт, ср, чт, пт, сб.

*Звездочка в поле означает все возможные значения для этого поля. Если, например, в третьем поле стоит звездочка, задание выполняется каждый день.

Если текстовый файл cron (в текущем каталоге) содержит информацию о вакансии, отправьте эту информацию в cron с помощью следующей команды:

root

Это оно! Вы настроены с помощью cron работа. С этого момента cron задание выполняется с регулярными интервалами (как указано в файле информации о задании), и вы получаете почтовые сообщения с результатами задания.

Чтобы убедиться, что задание действительно запланировано в Linux, введите следующую команду:

cron jobs

Вывод crontab команда показывает cron вакансии в настоящее время установлены на ваше имя. Чтобы удалить ваш cron вакансии, тип crontab -r .

Если вы войдете в систему как cron, вы также сможете настроить, изучить и удалить cron вакансии для любого пользователя. Чтобы настроить cron вакансии для пользователя, используйте эту команду:

/etc/crontab

Здесь, имя пользователя это пользователь, для которого вы устанавливаете /etc/crontab, и имя файла - файл, содержащий информацию о вакансиях.

Используйте следующую форму MAILTO команда для просмотра cron вакансии для пользователя:

#

Чтобы удалить run-parts пользователя | jobs, используйте следующую команду:

Тессалон Перлес и Никвил
run-parts

Примечание: /usr/bin демон также выполняет run-parts вакансии, перечисленные в общесистемном /etc/cron.hourly файл вакансии /etc/cron.daily. Вот типичный /etc/cron.weekly файл из системы Linux (введите кошка / и т. д. / crontab для просмотра файла):

/etc/cron.monthly

Первые четыре строки устанавливают несколько переменных среды для заданий, перечисленных в этом файле. run-parts переменная среды определяет пользователя, который получает почтовое сообщение с выводом из

at 21:30 at>
вакансии в этом файле.

Строка, начинающаяся с

at> ps at> job 1 at 2018-12-28 21:30
это строка комментария. Четыре строки, следующие за
4 2018-12-28 03:00 a root 5 2018-10-26 21:57 a root 6 2018-10-26 16:45 a root
комментарий выполнить
atrm 4
сценарий оболочки (расположенный в каталоге
5 0 * * * $HOME/myjob
) в разное время с именем определенного каталога в качестве аргумента. Каждый аргумент
crontab jobinfo
-
crontab -l
,
crontab _u  username filename  
,
crontab _u  username  -l
и
crontab -u  username  -r
- это каталог. По сути,
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
выполняет все сценарии, расположенные в каталоге, который вы указываете в качестве аргумента.

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

Каталоги скриптов для заданий cron

Имя каталога Скрипт выполняется
/etc/cron.hourly Каждый час
/etc/cron.daily Каждый день
/etc/cron.weekly Еженедельно
/etc/cron.monthly Раз в месяц