Утилита 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.