Утилита at: планируем разовые задачи

Многие даже не слышали об улитите at, с помощью которой можно запланировать откат правил брандмауэра через 5 минут, если что-то пошло не по плану. Оказавшись в такой ситуации, мы и познакомились с at. Потом, конечно же узнали, что в FreeBSD есть встроенный скрипт change_rules.sh для безопасной настройки правил ipfw., но это уже совсем другая история.

* at это утилита командной строки, которая помогает планировать реализацию команд в определённое время. Созданные с помощью at задания выполняются разово.

Устанавливаем at

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

Инсталляция at на Ubuntu и Debian

$ sudo apt update
$ sudo apt install at

Установка at на CentOS и Fedora

$ sudo yum install at

Используем команду at 

Упрощенный синтаксис команды выглядит следующим образом: 

at [OPTION...] runtime

Команда at принимает runtime, который вы задали, как параметр командной строки.

Как создать задание, которое выполнится в 9:00?

$ at 09:00

Как только клацнете Enter, перед вами появится командная строка at, которая начинается с at> (скорее всего). Далее, увидите уведомление, в котором указывается оболочка, где будет выполняться команда:

warning: commands will be executed using /bin/sh
at>

Введите команды, которые вам нужно выполнить. К примеру:

tar -xf /home/linuxize/file.tar.gz

Когда закончите с вводом команды, нажмите Ctrl-D, чтобы сохранить задание и выйти:

at> <EOT>
job 4 at Tue May  5 09:00:00 2020

Команда покажет номер, время и дату выполнения задания.

Определяем время выполнения

В утилите at можно:

  • указать время. Используйте форму HH:MM или HHMM. Чтобы задать 12-часовой формат времени, есть: am или pm. Вы можете также использовать строки как now, midnight, noon, or teatime (16:00). Если указанное время прошло, задание выполнится на следующий день.
  • обозначить дату. Команда дает возможность запланировать выполнение задания на указанную дату. Задать это можно с помощью названия месяца, а также года. Вы можете писать: today, tomorrow или weekday. Формат тоже на выбор: MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD.
  • добавить единицу времени. Утилита плюсует единицу времени в формате now + count time-unit формате, где count это число и time-unit может быть одна из следующих строк: minutes, hours, days или weeks.

Всё это можно комбинировать, вот несколько примеров: 

  • планируйте задачу на 10 минут позже текущего, на ближайшее воскресенье:

$ at sunday +10 minutes

  • запланируйте запуск задания на 13:00 через два дня:

$ at 1pm + 2 days

  • планируйте запуск задания на 12:30, 23 октября 2021 года:

$ at 12:30 102321

  • запланируйте запуск задания через час:

$ at now +1 hours

Указываем очередь 

По умолчанию задания планируются в указанной очереди. Вы можете задать очередь с помощью опции -q. Например, с очередью L:

$ at monday +2 hours -q L

Посмотреть очередь задач можно так:

$ atq

Как удалить задания, которые не завершились?

Чтобы удалить отложенное задание, вызовите atrm или, at -r за которой следует номер задания. Например, чтобы удалить задание с номером 9, вы должны запустить:

$ atrm 9

Подробности задачи:

$ at -c 9

С помощью файлов /etc/at.allow и /etc/at.deny можно ограничивать список пользователей, кому разрешили юзать at.

Итог

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

Добавить комментарий

Спасибо, что поделились