Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.9. Запуск процесса в контрольной группе
Важно
Для некоторых подсистем существуют обязательные параметры, которые необходимо установить, прежде чем приступать к переносу заданий. Так, например, прежде чем перенести задание в группу, использующую подсистему
cpuset
, необходимо определить значения cpuset.cpus
и cpuset.mems
.
Приведенные в этой секции примеры будут работать при условии, что заданы обязательные параметры для используемых контроллеров.
Раздел 3.10, «Дополнительные ресурсы» содержит перечень параметров.
Для запуска процессов в контрольной группе используется
cgexec
. Ниже будет запущен браузер lynx в пределах группы group1
. Этот процесс унаследует ограничения доступа, определенные подсистемой cpu
для этой группы:
~]# cgexec -g cpu:group1 lynx http://www.redhat.com
Формат:
cgexec -g
подсистемы:путь команда аргументы
.
- подсистемы — список подсистем, разделенных запятой. Если указать
*
, будут выбраны все подсистемы, которым принадлежат указанные процессы. Если в разных иерархиях есть группы с одним и тем же именем,-g
создаст процессы в каждой группе. - путь — путь к группе из корня иерархии.
- команда — выполняемая команда.
- аргументы — аргументы команды.
Дополнительный аргумент
-- sticky
перед командой оставляет дочерние процессы в текущей группе. Если аргумент не указан, и в то же время выполняется cgred, дочерние процессы будут переназначены в соответствии с настройками в /etc/cgrules.conf
. Сам процесс будет оставаться в исходной контрольной группе.
Создание иерархии в оболочке
При запуске нового процесса он унаследует группу создавшего его процесса. Поэтому чтобы запустить процесс в выбранной группе, можно перенести в эту группу процесс оболочки (см. Раздел 2.8, «Перенос процесса в контрольную группу») и уже затем запустить процесс из этой оболочки.
~]#echo $$ > /cgroup/lab1/group1/tasks
lynx
После выхода из lynx оболочка все еще будет состоять в группе
group1
. Поэтому лучше предпочесть следующий метод:
~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"
2.9.1. Запуск службы в контрольной группе
Требования к запускаемым в группе службам:
- они должны использовать файл
/etc/sysconfig/имя_службы
; - для запуска должны использовать функцию
daemon()
из/etc/init.d/functions
.
Чтобы запустить службу в контрольной группе, добавьте запись
CGROUP_DAEMON="подсистема:группа"
в ее файл /etc/sysconfig
. Пример:
CGROUP_DAEMON="cpuset:daemons/sql"