Утиліта 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-MMDD.
- додати одиницю часу. Утиліта плюсує одиницю часу в форматі 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.