Итак, мы уже выяснили, что планировщик cron – это мегаполезная прога для регулярно планируемых задач. А что, если нужно выполнить задачу только один раз? Именно для этого нам послужит утилита at
.
Программа at
в FreeBSD
На самом деле программа at состоит из нескольких команд:
at
– организатор задания;atq
– отображает незавершённые задания;atrm
– отменяет незавершённые задания;batch
– верисия at, которая выполняется только в том случае, если загрузка системы меньше некоторого порогового значения (по умолчанию 1.5).
Как использовать утилиту at
Когда мы используем утилиту at
, чтобы создать задание, она читает команды построчно, которые могут быть определены либо в командной строке (стандартный ввод), либо в предварительно заготовленном файле.
Существует несколько удобных форматов времени:
Командная строка
|
Назначение
|
at 10pm |
Выполняет в 10:00 текущего дня, либо на след.день, если сейчас больше 10:00. |
at 8:00am Jun 28 |
Выполняет в 8 утра 28 июня. |
at midnight Jan 1 2013 |
Выполнится в первую секунду 2013-го года. |
at teatime tomorrow |
Выполнится в 16:00 (такое вот чайное время) завтра. |
После того, как введём подобную строку, можно вводит команды в стандартном режиме, строку за строкой. По завершению ввода нажимаем <Ctrl+D> и задание помещается в очередь!
Я поясню этот скриншот:
- date – Показал текущую дату-время, чтобы знать на сколько планировать;
- cat log.txt – Показал файл log.txt – он пуст;
- at 4:55am – Задача выполняться будет в 4:55;
- date >> log.txt – Текущую дату-время записать в log.txt;
- atq – Показал, что задача с номером 2 создалась (а так же её время);
- cat log.txt – видим, что записалась дата;
- atq – Показываем, что в очереди больше не висит задач.
В качестве альтернативного метода можно заблаговременно создать входной файл и передать его программе at:
# at -f my_script.sh 8:00am
выполнит файл my_script.sh
в 8 утра сегодня, если меньше 8 утра, или завтра, если уже сегодня прошла вспышка.
Вот например:
Пояснять особо нечего, то же самое. Только файл my_cron.sh из прошлого примера с cron-ом, содержит то же самое, что и в предыдущем примере;
Почему не сразу срабатывает at?
Кстати, не пытайтесь увидеть результаты выполнения, если дату поставить на следующую минуту, например. Оно сработает, но не сразу. Дело в том, что при выполнении заданий программой at
используется команда atrun
, который запускается каждые 5 минут (по умолчанию, но можно изменить) и проверяет, нет ли заданий, срок которых прошёл или подошёл. Если таковые найдены, то выполняет их и убирает из очереди. Изменить время проверки можно в файле /etc/crontab
.
Ну а удалять из очереди очень просто
# atrm 5
отменит 5-е задание.
Надеюсь, эти инструменты (наряду с cron) вам окажутся полезными.
Comments: