Как планировать одноразовые задачи на Linux с помощью at

Управление временем — навык, который проще автоматизировать. Компьютеры хорошо выполняют повторяющиеся и точные задачи. На Linux для таких целей обычно используют cron для повторяющихся заданий и at для одноразовых запусков в заданное время.
Установка at на Linux
Утилита at не всегда предустановлена. Установите её через менеджер пакетов вашей дистрибуции.
- Debian/Ubuntu, MX Linux, Pop!_OS:
sudo apt install at- RHEL, Fedora, Rocky Linux (DNF):
sudo dnf install at- Arch/Manjaro:
sudo pacman -S atВажно: команды запускаются с правами пользователя, но установка требует привилегий администратора.
Запуск службы планировщика atd
at использует демон планировщика atd. Перед отправкой задач проверьте статус службы:
sudo systemctl status atdЕсли демон не запущен, запустите его:
sudo systemctl start atdПри необходимости включите автозапуск:
sudo systemctl enable --now atdПланирование задач с помощью at
Базовый синтаксис отправки команды в очередь:
command | at time_specПример: создать файл со списком содержимого текущей директории через минуту.
- Перейдите в домашнюю папку пользователя:
cd ~- Отправьте команду в at:
ls > list_items.txt | at now + 1 minutesat вернёт идентификатор задания. Через минуту файл list_items.txt будет создан в вашей домашней папке.
Пример запуска в полдень следующего дня:
ls > list_items.txt | at noon tomorrowДля точной привязки по дате используйте формат MMDDHHMM YYYY. Например, выполнить команду 25 декабря 2023 года в 13:00:
ls > list_items.txt | at 12251300 2023Справка по форматам времени и дополнительным опциям доступна в man-странице:
man atПримечание по локализации: выражения вроде “noon” и “tomorrow” зависят от локали и интерпретации парсера времени; при сомнениях используйте числовой формат.
Планирование скриптов с помощью at
at может запускать не только одиночные команды, но и целые скрипты. Предположим, что в домашней папке есть скрипт disk_usage.sh, который сохраняет вывод df -h в файл disk_usage.txt:
#!/bin/bash
df -h > ~/disk_usage.txtСделайте скрипт исполняемым и запустите через 30 минут:
chmod +x ~/disk_usage.sh
at now + 30 minutes -f ~/disk_usage.shЕсли скрипт использует переменные окружения или пути, указывайте их явно: at запускает задачи в минимальном окружении, поэтому лучше использовать абсолютные пути и экспорт переменных внутри скрипта.
Управление ожидающими задачами
Просмотр всех ожидающих задач:
atqУдаление задачи по номеру:
atrm Пример удаления задачи №12:
atrm 12Когда at не подходит
- Повторяющиеся задания. Для периодических задач используйте cron или systemd timers.
- Долгие сценарии, требующие сложного окружения. at запускает задачи в простом окружении без профильных инициализаций.
- Зависимые цепочки задач с условиями успеха/провала. Для этого подходят orchestration-инструменты или systemd с юнитами и зависимостями.
Сравнение с cron
- at: одноразовый запуск в указанное время.
- cron: регулярные, повторяющиеся задания (минуты/часы/дни).
- systemd timers: современная альтернатива с логированием и управлением юнитами.
Выбор: если нужно однократное действие — at. Если задача будет выполняться периодически — cron или systemd timers.
Шпаргалка команд и привычные сценарии
- Отправить команду на исполнение в 20:00:
command | at 20:00- Использовать файл с командами (ввод в at из файла):
at -f /path/to/commands.txt 22:00- Планировать скрипт:
at now + 15 minutes -f ~/script.sh- Просмотреть очередь задач текущего пользователя:
atq- Удалить задачу по номеру:
atrm 5- Проверить статус службы:
sudo systemctl status atdОтладка и распространённые ошибки
- Файл не создаётся после запуска: проверьте, использовались ли абсолютные пути в скрипте и нет ли ошибок в самих командах.
- Скрипт не исполняется: убедитесь, что у него установлен бит исполнения (chmod +x) и правильный shebang (например, #!/bin/bash).
- Задание не выполняется из-за выключенного atd: запустите сервис и проверьте логи через journalctl:
sudo journalctl -u atd --since "1 hour ago"- Переменные окружения отсутствуют: явно экспортируйте необходимые переменные в скрипте или используйте полный PATH внутри скриптов.
Мини‑методика: как надёжно отправить одноразовое задание
- Подготовьте скрипт с абсолютными путями и shebang.
- Сделайте скрипт исполняемым: chmod +x script.sh.
- Убедитесь, что atd запущен и включён.
- Отправьте скрипт через at: at now + N minutes -f ~/script.sh.
- Проверьте очередь atq и логи atd при ошибках.
Чек‑лист для роли пользователя
Пользователь
- Использовать абсолютные пути
- Тестировать команду вручную перед отправкой в at
- Проверять atq
Администратор
- Убедиться, что atd запущен и включён
- Проверять логи и права доступа к файлам
- Настраивать безопасность (ограничение доступа к at через /etc/at.allow и /etc/at.deny)
1‑строчный глоссарий
- at: утилита для однократного планирования команд.
- atd: демон, который выполняет задания at.
- atq: просмотреть очередь задач.
- atrm: удалить задачу из очереди.
Критерии приёмки
- Задание появляется в выводе atq до времени запуска.
- Файл/результат создаётся в указанном месте после времени запуска.
- В логах atd нет ошибок, связанных с выполнением задания.
Краткая сводка
at удобен для одноразовых задач и простых автоматизаций. Для периодических работ используйте cron или systemd timers. Всегда проверяйте окружение и права доступа — at запускает задания в сжатом окружении, и это частая причина проблем.
Важное: настройте /etc/at.allow и /etc/at.deny при необходимости ограничить, кто может планировать задания.
Спасибо за внимание — пользуйтесь at, когда нужна простая и быстрая одноразовая автоматизация на Linux.
Похожие материалы
Настройка яркости Echo Dot с часами
Автообновления на PS5: настройка и советы
Как отключить Google Assistant на всех устройствах
Отключение автозапуска звука в браузерах
Как просмотреть закрытый профиль Facebook и защитить данные