Планирование задач в Linux с at

Первый раз, когда я управлял загруженным сервером, мне приходилось ждать удобного момента для перезагрузки — обычно это было около 3:00. Я подумал: «Неприятно просыпаться ради перезагрузки». Через несколько секунд понял простую вещь: это Linux — такие задачи легко автоматизировать. Так я открыл для себя утилиту at.
at удобен тем, что позволяет один раз запланировать выполнение команды или скрипта в будущем. На сервере это полезно для автоматических действий без вмешательства человека. На рабочем столе at тоже может пригодиться: плановое выключение после большого скачивания, напоминание и т. п. Практически любое действие можно запланировать — при помощи подходящих опций и командной строки.
Также: Руководство по использованию Cron в Linux.
Установка at в разных дистрибутивах Linux
На Debian и производных (Ubuntu, Linux Mint) выполните:
sudo apt install at
На Fedora:
sudo dnf install atНа Arch Linux:
sudo pacman -S atНа openSUSE:
sudo zypper install atВключение автоматического запуска демона atd и запуск сервиса
Некоторые дистрибутивы автоматически включают автозапуск atd, другие — нет. Проверьте статус:
systemctl is-enabled atd.service
Если вывод показывает “disabled”, включите сервис и запустите его:
sudo systemctl enable atd.service
sudo systemctl start atd.serviceВажно: если atd не запущен, задания не будут выполняться по расписанию.
Форматы указания времени для at
at принимает несколько форматов времени. Вот основные варианты:
- Запуск через заданный интервал:
at now + 10 minutes
at now + 10 hours
at now + 10 days
at now + 10 weeks
- Запуск в конкретное время того же дня:
at 23:10Если сейчас 12:00 и вы укажете at 11:00, команда выполнится завтра в 11:00.
- Запуск в конкретную дату и время:
at 12:00 December 31Другие способы и тонкости описаны в онлайн-мануале at (man at).
Как пользоваться командой at (интерактивное приглашение)
Когда вы задаёте время, at открывает интерактивное приглашение (пример ниже):

В приглашении введите нужные команды, каждая — новая строка. Команды выполнятся под вашей текущей учётной записью. Когда закончите ввод, нажмите Ctrl+D. Появится подтверждение с временем выполнения.
Если команды требуют root-привилегий, не используйте sudo внутри задания — это не сработает, потому что at запускает задания без возможности ввода пароля. Вместо этого:
sudo -iА затем выполните at от имени root. После планирования выйдите из root:
exit
Если компьютер выключен в момент, когда задание должно было сработать, оно выполнится при следующем включении, если время уже прошло.
Просмотр и удаление запланированных заданий
Просмотреть очередь заданий:
atqили
at -l
Чтобы увидеть содержимое задания, используйте его номер (префикс):
at -c 22
Чтобы удалить задание по номеру:
atrm 22Планирование графических приложений через at
Чтобы запустить графическое приложение, нужно передать значение переменной окружения DISPLAY и при необходимости XAUTHORITY. Часто DISPLAY равен :0. Узнать текущее значение можно так:
echo $DISPLAYВ приглашении at задайте DISPLAY и запустите приложение:
export DISPLAY=:0
export XAUTHORITY=/home/youruser/.Xauthority
libreoffice &
Ctrl+D

Теперь приложение откроется на рабочем столе и напомнит о задаче.
Когда at — не лучшее решение
- Периодические задачи (каждый день/неделю) лучше ставить в cron или systemd timers.
- Когда требуется сложная логика повторов с пропуском при выключении — посмотрите anacron или systemd timers.
- Если нужна надёжность в кластере — используйте средства оркестрации или CI/CD.
Альтернативы и сравнение (когда выбирать что)
- at — однократные задания в будущем. Простота и интерактивность.
- cron — регулярные, повторяющиеся задания (min/hour/day/week/month).
- systemd timers — замена cron для systemd-систем; удобны интеграцией с сервисами и логами.
- anacron — выполняет пропущенные задания после простоя машины; полезно для ноутбуков.
Mermaid-диаграмма выбора:
flowchart TD
A[Нужно одноразовое действие?] -->|Да| B[Используйте at]
A -->|Нет| C[Нужно повторение?]
C -->|Да| D[cron или systemd timers]
C -->|Нет| E[Оцените orchestration/CI]Карточка-чесатка: основные команды (cheat sheet)
- Установить пакет: sudo apt install at
- Запустить демон: sudo systemctl start atd.service
- Запланировать через 10 минут: at now + 10 minutes
- Запланировать на 23:10: at 23:10
- Посмотреть очередь: atq
- Посмотреть задание: at -c <номер>
- Удалить задание: atrm <номер>
Контроль безопасности и рекомендации
- Ограничьте запуск at для определённых пользователей через /etc/at.allow и /etc/at.deny.
- Не храните в заданиях пароли в открытом виде.
- Для заданий с повышенными привилегиями используйте исполнение от пользователя root и ведите аудит действий (rsyslog, journald).
- Учитывайте, что задания, запускаемые в графическом сеансе, могут получить доступ к сессии пользователя — контролируйте XAUTHORITY.
Важное: проверьте права на скрипты, которые запускает at, и используйте абсолютные пути в командах внутри заданий.
Руководство на случай проблем (Runbook)
- Проверка статуса демона:
systemctl status atd.service- Проверка очереди:
atq- Просмотр логов (journald):
journalctl -u atd.serviceЕсли задания не выполняются, проверьте /etc/at.allow и /etc/at.deny, права на скрипты и переменные окружения.
При необходимости удалите подозрительные задания: atrm <номер>.
Критерии приёмки (как понять, что задание выполнено)
- Задание отсутствует в выводе atq после ожидаемого времени.
- В логах journald или rsyslog присутствует запись о запуске команды/скрипта.
- Ожидаемый эффект (файл, процесс, уведомление) появился.
Контроль качества и тесты (тест-кейсы)
- Планирование простого echo: запланируйте
echo test > /tmp/at-testчерез 2 минуты, дождитесь появления файла. - Тест с root: выполните задание от root, которое записывает в /root, и подтвердите доступ.
- Пропуск выполнения при выключении: запланируйте задание в ближайший час, выключите компьютер и включите позже — задание должно выполниться при следующем запуске, если время просрочено.
Списки задач по ролям
Администратор сервера:
- Установить at и atd, включить сервис.
- Настроить /etc/at.allow и /etc/at.deny.
- Аудит логов и тестирование заданий.
Пользователь рабочего стола:
- Проверить DISPLAY и XAUTHORITY для графических приложений.
- Использовать абсолютные пути в заданиях.
- Оповестить себя через графическое приложение или уведомление.
Краткий глоссарий
- at — утилита для однократного планирования команд.
- atd — демон, выполняющий задания at.
- cron — утилита для периодического планирования.
- systemd timers — таймеры systemd, альтернатива cron.
Заключение
at — надёжный и простой инструмент для однократного планирования команд. Он незаменим в сценариях, где нужно выполнить действие в определённое время без постоянного повторения. Для регулярных задач рассмотрите cron или systemd timers. Не забывайте про безопасность: управляйте доступом к at и проверяйте права на выполняемые скрипты.
Резюме:
- at хорош для one-off задач.
- Для повторов используйте cron/systemd timers.
- Контролируйте доступ и логи, тестируйте задания заранее.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента