Я использовал приведенный ниже служебный блок, чтобы запустить несколько процессов, которые при запуске сильно загружают процессор и пропускную способность диска.
Поскольку процессы, которые я хочу ограничить, не имеют возможности указать, сколько ресурсов они должны занять, я использовал CGroups, чтобы контролировать, сколько им следует брать из доступных ресурсов.
Проблема в том, что если CGroups выходит из строя, системы перестают отвечать, и их необходимо перезапустить, поэтому я хотел бы иметь способ остановить процессы в этом случае.
Сервисный блок для CGroups должен перезапустить сервис в случае сбоя, но по какой-то причине этого не произошло, возможно, из-за того, что система перестала отвечать.
У меня тоже нет журналов, потому что система была отключена из-за большого использования ресурсов, и у меня нет доступа к этой информации, пока администратор не отменит приостановку.
Единица обслуживания будет ограничена
[Unit]
Description=HIGH RESOURCES USAGE daemon
After=cgroups.service network.target
[Service]
User=myuser
Group=myuser
ExecStart=/usr/bin/xxxxxxxx
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/xxxxxxxx
WorkingDirectory=/home/myuser
[Install]
WantedBy=multi-user.target
Подразделение обслуживания CGroups
[Unit]
Description=Load cgroup configs
After=remote-fs.target
[Service]
Type=forking
ExecStartPre=/bin/echo "Processing /etc/cgconfig.conf..."
ExecStartPre=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf
ExecStartPre=/bin/echo "Processing /etc/cgrules.conf..."
ExecStart=/usr/sbin/cgrulesengd --logfile=/var/log/cgrulesengd.log
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
cgconfig.conf
group app_limit {
cpu {
cpu.cfs_quota_us = 200000
cpu.cfs_period_us = 1000000
}
blkio {
blkio.throttle.read_iops_device = "253:0 35";
blkio.throttle.write_iops_device = "253:0 35";
blkio.throttle.write_bps_device = "253:0 262144000";
}
}
cgrules.conf
myuser cpu,blkio app_limit/
Похоже, вы пытаетесь использовать старые вещи для управления контрольными группами, когда в systemd уже есть все встроенное для выполнения этой работы. cgconfig устарел и не должен использоваться там, где работает systemd.
Вы должны взглянуть на https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
Подводя итог, вы должны иметь возможность делать то, что хотите, просто добавляя точные ключевые слова управления ресурсами в раздел [Служба] и удаляя свой служебный модуль cgroup.