linux-labs

Вики / Базовые команды

at (разовое задание по времени)

Выполнить команду один раз в заданное время — в отличие от регулярного cron.

at запускает команду один раз в указанное время (в отличие от cron — повторяющегося расписания). Удобно для отложенных разовых действий: перезагрузить ночью, выключить через час, авто-откат правила firewall. Демон atd.

systemctl status atd
echo "systemctl restart nginx" | at 03:00      # выполнить в 3:00
at 03:00                          # интерактивно (вводишь команды, Ctrl+D — конец)
at now + 1 hour                   # через час (minutes/hours/days/weeks)
at 14:30 tomorrow
at 2026-07-01                     # на дату
at -f script.sh 02:00             # выполнить файл-скрипт
echo "cmd" | at midnight          # из конвейера
batch                             # выполнить, когда нагрузка спадёт (load < 1.5)

atq                               # очередь заданий (id, время, очередь)
at -c 5                           # показать содержимое (и окружение) задания №5
atrm 5                            # удалить задание (= at -r 5)
at 17:00              at 5pm              at now + 30 minutes
at midnight           at noon             at teatime   (16:00)
at 10:00 Jul 31       at 10am tomorrow    at now + 2 days

Доступ регулируется /etc/at.allow / /etc/at.deny (кто может ставить задания).

Задание не выполнилось

Демон atd должен работать (systemctl status atd). Результат at приходит почтой локальному пользователю (/var/mail/), stdout/stderr туда — не на экран. Перенаправляй сам: echo "cmd > /tmp/out 2>&1" | at ....

Команда «не нашлась» в at

Как и cron, at имеет скудное окружение (но at сохраняет текущее env на момент постановки — at -c ID покажет). Всё равно надёжнее абсолютные пути (см. env-vars).

Нужно отменить

atq (найти id) → atrm <id>.

at: command not found / нет atd

Пакет at не установлен или демон не запущен: sudo apt install at, sudo systemctl enable --now atd.

Разовое vs регулярное vs службой

Разово — at; по расписанию — cron/systemd-таймеры; постоянный сервис — systemd-юнит. «Когда не занят» — batch.

echo "команда" | at 03:00         # разово в 3:00
at now + 30 minutes               # через 30 минут
at -f script.sh 02:00             # файл-скрипт
atq ; at -c ID ; atrm ID          # очередь / показать / удалить
# вывод уходит почтой — перенаправляй сам: "cmd > /tmp/out 2>&1"

См. также