Команда Linux batch

Linux 命令大全Справочник команд Linux


batch — это инструмент командной строки в системах Linux, используемый для выполнения задач, когда системная нагрузка низкая. Он является частью семейства команд at и специально предназначен для автоматического запуска пакетных заданий, когда система простаивает.

В отличие от команды at, batch не требует определённого времени выполнения; вместо этого система решает, когда запускать задачи, исходя из текущих условий нагрузки. Когда средняя загрузка системы ниже 0.8 (настраивается), batch автоматически выполняет задачи в очереди.


Как работает команда batch

batch работает с помощью следующих механизмов:

  1. Обнаружение нагрузки: Система непрерывно отслеживает среднюю нагрузку.
  2. Очередь задач: Помещает задачи в выделенную очередь (обычно очередь "batch").
  3. Автоматический запуск: выполняет задачи в очереди, когда системная нагрузка падает ниже порогового значения.
  4. Последовательное выполнение: выполняет задачи последовательно в соответствии с принципом первым пришёл — первым обслужен (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: Базовое использование

  1. Введите команду batch
  2. Введите команду для выполнения (нажмите Ctrl+D, чтобы завершить ввод)

Пример

$ batch
at> echo "Это выполнится, когда система будет простаивать" >> ~/batch_test.log
at> date >> ~/batch_test.log
at>   # Нажмите Ctrl+D
задание 5 в Чт мар  2 14:00:00 2023

Пример 2: Чтение команд из файла

Создайте файл сценария задачи:

Пример

$ cat myscript.sh
#!/bin/bash
echo "Начало резервного копирования в $(date)" >> ~/backup.log
tar -czf ~/backup-$(date +%Y%m%d).tar.gz ~/Documents
echo "Резервное копирование завершено в $(date)" >> ~/backup.log

Отправьте задачу:

Пример

$ batch -f myscript.sh
задание 6 в Чт мар  2 14:05:00 2023

Пример 3: Просмотр задач в очереди

Пример

$ atq
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:

  1. Отредактируйте файл конфигурации (расположение может зависеть от дистрибутива):
sudo nano /etc/atd.conf
  1. Измените или добавьте следующую строку(и):
OPTS="-l 1.5"  # 设置负载阈值为1.5
  1. Перезапустите службу atd:
sudo systemctl restart atd

Просмотр средней нагрузки системы

Пример

$ uptime
 14:10:30 работает 2 дн.,  3:15,  3 пользователей, средняя нагрузка: 0.45, 0.60, 0.72

Три числа представляют среднюю нагрузку системы за последние 1 минуту, 5 минут и 15 минут соответственно.


Меры предосторожности

  1. Управление разрешениями: По умолчанию файлы /etc/at.allow и /etc/at.deny определяют, какие пользователи могут использовать команду batch.
  2. Переменные среды: задачи batch не наследуют все переменные среды из текущей оболочки; при необходимости задайте их явно в скрипте.
  3. Обработка вывода: стандартный вывод и ошибки задач по умолчанию отправляются пользователю по электронной почте; рекомендуется перенаправлять их в файл.
  4. Длительные задачи: batch не подходит для задач, которые выполняются слишком долго; рассмотрите использование nohup или tmux.
  5. Системная служба: Убедитесь, что служба atd запущена (systemctl status atd)

Практические сценарии применения

  1. Обслуживание системы: Выполняйте задачи обслуживания, такие как очистка диска и ротация журналов, в часы низкой нагрузки.
  2. Ресурсоёмкие задачи: Задания, требующие большого количества системных ресурсов, например обработка больших данных и компиляция крупных проектов.
  3. Запланированные отчёты: Создавайте ежедневные/еженедельные отчёты об использовании системы.
  4. Автоматические резервные копии: Выполняйте операции резервного копирования, когда система простаивает.
  5. Пакетные задания: Обрабатывайте несколько похожих задач в очереди.

Сравнение со связанными командами

Команда Время выполнения Сценарий применения Использование ресурсов
at Указать конкретное время Задачи, выполняемые в точное время Не учитывает нагрузку на систему
batch Когда система простаивает Несрочные фоновые задачи Разумно использует простаивающие ресурсы
cron Периодическое планирование Задачи, которые повторяются периодически Не учитывает нагрузку на систему
nohup Немедленное выполнение Длительные задачи Непрерывно потребляет ресурсы

ЧАВО

Вопрос 1: Как посмотреть вывод пакетных задач?

Ответ: По умолчанию вывод отправляется по электронной почте. Вы также можете перенаправить его в файл в команде:

batch < output.log 2>&1
EOF

Вопрос 2: Почему моя пакетная задача не выполнилась?

Ответ: Возможные причины:

  • Системная нагрузка остаётся выше порогового значения
  • Служба atd не запущена
  • Задача была отменена администратором
  • У пользователя нет разрешения на использование batch

Вопрос 3: Могут ли задачи batch получать доступ к графическому интерфейсу?

О: Нет. Задачи batch выполняются в неинтерактивной среде и не могут получить доступ к графическому интерфейсу или устройствам отображения.

Вопрос 4: Как задать приоритет задач batch?

О: Для настройки приоритета можно использовать команду nice:

Пример

batch &lt;&lt;EOF
nice -n 10 команда
EOF

Итог

Команда batch — мощный инструмент пакетной обработки в системах Linux. Она может:

  • Интеллектуально использовать простаивающие системные ресурсы
  • Автоматически выполнять задачи при низкой нагрузке
  • Упростить управление фоновыми задачами
  • Улучшить использование системных ресурсов

Освоение команды batch может помочь системным администраторам и разработчикам более эффективно управлять системными ресурсами, и она особенно подходит для выполнения несрочных фоновых задач обработки.


Linux 命令大全Справочник команд Linux

Другие расширения