Материал просмотрен 1,853 раз(а)

Итак, мы уже выяснили, что планировщик 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) вам окажутся полезными.