Команда Linux batch
batch — это инструмент командной строки в системах Linux, используемый для выполнения задач, когда системная нагрузка низкая. Он является частью семейства команд at и специально предназначен для автоматического запуска пакетных заданий, когда система простаивает.
В отличие от команды at, batch не требует определённого времени выполнения; вместо этого система решает, когда запускать задачи, исходя из текущих условий нагрузки. Когда средняя загрузка системы ниже 0.8 (настраивается), batch автоматически выполняет задачи в очереди.
Как работает команда batch
batch работает с помощью следующих механизмов:
- Обнаружение нагрузки: Система непрерывно отслеживает среднюю нагрузку.
- Очередь задач: Помещает задачи в выделенную очередь (обычно очередь "batch").
- Автоматический запуск: выполняет задачи в очереди, когда системная нагрузка падает ниже порогового значения.
- Последовательное выполнение: выполняет задачи последовательно в соответствии с принципом первым пришёл — первым обслужен (FIFO).
Базовый синтаксис
Базовый формат синтаксиса команды batch имеет вид:
batch [选项] [时间规格]
Распространённые параметры
| Опция | Описание |
|---|---|
-f 文件 |
Читает команды из указанного файла вместо стандартного ввода. |
-m |
Отправляет электронное письмо пользователю после завершения задачи. |
-q 队列 |
Указывает конкретную очередь для использования (по умолчанию используется очередь batch). |
-v |
Отображает время выполнения задачи. |
Формат указания времени
Хотя batch строго не требует параметра времени, он принимает тот же формат времени, что и команда at:
HH:MM 特定时间(24小时制) midnight 午夜(00:00) noon 中午(12:00) teatime 下午茶时间(16:00) AM/PM 上午/下午标识 now + 时间 相对时间(如 now + 2 hours)
Примеры использования
Пример 1: Базовое использование
- Введите команду batch
- Введите команду для выполнения (нажмите Ctrl+D, чтобы завершить ввод)
Пример
at> echo "Это выполнится, когда система будет простаивать" >> ~/batch_test.log
at> date >> ~/batch_test.log
at> # Нажмите Ctrl+D
задание 5 в Чт мар 2 14:00:00 2023
Пример 2: Чтение команд из файла
Создайте файл сценария задачи:
Пример
#!/bin/bash
echo "Начало резервного копирования в $(date)" >> ~/backup.log
tar -czf ~/backup-$(date +%Y%m%d).tar.gz ~/Documents
echo "Резервное копирование завершено в $(date)" >> ~/backup.log
Отправьте задачу:
Пример
задание 6 в Чт мар 2 14:05:00 2023
Пример 3: Просмотр задач в очереди
Пример
5 Чт мар 2 14:00:00 2023 a userid batch
6 Чт мар 2 14:05:00 2023 a userid batch
Пример 4: Удаление задач в очереди
$ atrm 5 # 删除任务ID为5的任务
Расширенная конфигурация
Изменение порога нагрузки
По умолчанию batch выполняет задачи, когда средняя загрузка системы ниже 0.8. Вы можете изменить этот порог, изменив конфигурацию службы atd:
- Отредактируйте файл конфигурации (расположение может зависеть от дистрибутива):
sudo nano /etc/atd.conf
- Измените или добавьте следующую строку(и):
OPTS="-l 1.5" # 设置负载阈值为1.5
- Перезапустите службу atd:
sudo systemctl restart atd
Просмотр средней нагрузки системы
Пример
14:10:30 работает 2 дн., 3:15, 3 пользователей, средняя нагрузка: 0.45, 0.60, 0.72
Три числа представляют среднюю нагрузку системы за последние 1 минуту, 5 минут и 15 минут соответственно.
Меры предосторожности
- Управление разрешениями: По умолчанию файлы /etc/at.allow и /etc/at.deny определяют, какие пользователи могут использовать команду batch.
- Переменные среды: задачи batch не наследуют все переменные среды из текущей оболочки; при необходимости задайте их явно в скрипте.
- Обработка вывода: стандартный вывод и ошибки задач по умолчанию отправляются пользователю по электронной почте; рекомендуется перенаправлять их в файл.
- Длительные задачи: batch не подходит для задач, которые выполняются слишком долго; рассмотрите использование nohup или tmux.
- Системная служба: Убедитесь, что служба atd запущена (
systemctl status atd)
Практические сценарии применения
- Обслуживание системы: Выполняйте задачи обслуживания, такие как очистка диска и ротация журналов, в часы низкой нагрузки.
- Ресурсоёмкие задачи: Задания, требующие большого количества системных ресурсов, например обработка больших данных и компиляция крупных проектов.
- Запланированные отчёты: Создавайте ежедневные/еженедельные отчёты об использовании системы.
- Автоматические резервные копии: Выполняйте операции резервного копирования, когда система простаивает.
- Пакетные задания: Обрабатывайте несколько похожих задач в очереди.
Сравнение со связанными командами
| Команда | Время выполнения | Сценарий применения | Использование ресурсов |
|---|---|---|---|
at |
Указать конкретное время | Задачи, выполняемые в точное время | Не учитывает нагрузку на систему |
batch |
Когда система простаивает | Несрочные фоновые задачи | Разумно использует простаивающие ресурсы |
cron |
Периодическое планирование | Задачи, которые повторяются периодически | Не учитывает нагрузку на систему |
nohup |
Немедленное выполнение | Длительные задачи | Непрерывно потребляет ресурсы |
ЧАВО
Вопрос 1: Как посмотреть вывод пакетных задач?
Ответ: По умолчанию вывод отправляется по электронной почте. Вы также можете перенаправить его в файл в команде:
batch < output.log 2>&1 EOF
Вопрос 2: Почему моя пакетная задача не выполнилась?
Ответ: Возможные причины:
- Системная нагрузка остаётся выше порогового значения
- Служба atd не запущена
- Задача была отменена администратором
- У пользователя нет разрешения на использование batch
Вопрос 3: Могут ли задачи batch получать доступ к графическому интерфейсу?
О: Нет. Задачи batch выполняются в неинтерактивной среде и не могут получить доступ к графическому интерфейсу или устройствам отображения.
Вопрос 4: Как задать приоритет задач batch?
О: Для настройки приоритета можно использовать команду nice:
Пример
nice -n 10 команда
EOF
Итог
Команда batch — мощный инструмент пакетной обработки в системах Linux. Она может:
- Интеллектуально использовать простаивающие системные ресурсы
- Автоматически выполнять задачи при низкой нагрузке
- Упростить управление фоновыми задачами
- Улучшить использование системных ресурсов
Освоение команды batch может помочь системным администраторам и разработчикам более эффективно управлять системными ресурсами, и она особенно подходит для выполнения несрочных фоновых задач обработки.
Другие расширения
Справочник команд Linux