Batch и дефолтные 1.5

Как известно, batch — удобная команда из пакета at, позволяющая выполнить что-то из под shell тогда, когда система будет простаивать. Простой определяется по уровню нагрузки на систему. В linux этот показатель включает нагрузку как на процессор так и IO-подсистему и вопреки расхожему мнению его значение может превышать n, где n - количество ядер/процессоров. Нагрузку можно увидеть там, откуда ее берет "uptime" - в /proc/loadavg

Уровень срабатывания задан при компиляции batch и составляет 1.5.

Проблема в том, что в многоядерных и нагруженных системах этого может быть недостаточно и фоновая активность постоянно или длительное время превышает эти самые 1.5.

Для того чтобы изменить этот параметр достаточно указать дополнительный параметр для демона at (atd) -l

atd [-l load_avg] [-b batch_interval] [-d] [-f] [-s]
из man atd

Смотрим на сервис:
systemctl cat atd.service

# /lib/systemd/system/atd.service
[Unit]
Description=Deferred execution scheduler
Documentation=man:atd(8)

[Service]
ExecStart=/usr/sbin/atd -f
IgnoreSIGPIPE=false

[Install]
WantedBy=multi-user.target

Правим
nano /lib/systemd/system/atd.service

Добавляем параметр -l, изменяя строчку в юните
ExecStart=/usr/sbin/atd -f -l 3

Перезагружаем конфигурацию systemd
systemctl daemon-reload

Перезапускаем сервис (убедившись что сейчас ничего не выполняется)
systemctl stop atd.service
systemctl start atd.service

Проверяем
systemctl status atd.service

Теперь можно оставлять задания:
echo "echo TEST > "$(tty) | batch

Похожие записи:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *