Рейтинг:0

Как динамически изменить группу подпроцессов службы systemd (бегун gitlab)?

флаг ru

Я запускаю gitlab runner и хочу, чтобы каждое задание помещалось в свою собственную контрольную группу.

Я могу установить для подпроцесса gitlab bash правильную контрольную группу, но его дочерние элементы не наследуют контрольную группу.

Вот как я это делаю:

$ /usr/bin/ps -opid,cgroup $PPID $$
   ГРУППА ПИД
 43547 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/user.slice,1: имя = systemd:/user.slice/user-988.slice/session-c2500.scope
 43548 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/user.slice,1: имя = systemd:/user.slice/user-988.slice/session-c2500.scope
$ /usr/bin/sudo /usr/bin/env CGROUP_LOGLEVEL=DEBUG /usr/bin/cgclassify -g cpu,cpuacct:/gitlab-runner/$CI_CONCURRENT_PROJECT_ID --sticky $PPID $$
нашел процессор в rw,nosuid,nodev,noexec,relatime,cpuacct,cpu
Найден параметр cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu, count 0
...обрезанный...
Переместит pid 43547 в cgroup '/gitlab-runner/0'
Добавление процессора контроллера
Добавление контроллера cpuacct
Переместит pid 43548 в cgroup '/gitlab-runner/0'
Добавление процессора контроллера
Добавление контроллера cpuacct
$ /usr/bin/ps -opid,cgroup $PPID $$
   ГРУППА ПИД
 43547 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/gitlab-runner/0, 1: имя = systemd:/user.slice/user-988.slice/session-c2500.scope
 43548 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/gitlab-runner/0, 1: имя = systemd:/user.slice/user-988.slice/session-c2500.scope

Запрос другого запуска, поиск процессов в cgroup:

$ ps -e -opid,comm,cgroup | grep gitlab-бегун/3
 77554 ву 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/gitlab-runner/3 ,1:имя=systemd:/user.slice/user-988.slice/session-c2604.scope
 77555 bash 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2:cpuacct,cpu:/gitlab-runner/3 ,1:имя=systemd:/user.slice/user-988.slice/session-c2604.scope

Глядя на своих детей...

$pstree -p 77554
su(77554)—bash(77555)—bash(77575)——python3.6(78199)— ârun-cypress-spl(78206)âââcoverage(80245)ââ¬ânode(91561)ââ¬âCypress (91796 ) ¬ Кипарис (91799) Кипарис (91990) ¬ {Кипарис} (91992)
                                                                                                    â â â ââ{Кипарис}(91993)
  

Его дочерние элементы не входят в контрольную группу:

$ ps -opid,comm,cgroup 78206 | кот
   ГРУППА ПИД-КОМАНД
   78206 run-cypress-spl 78206 run-cypress-spl 11:blkio:/user.slice,9:устройства:/user.slice,7:pids:/user.slice,6:память:/user.slice,2: cpuacct,cpu:/user.slice,1:name=systemd:/user.slice/user-988.slice/session-c2604.scope

я также нашел https://stackoverflow.com/questions/50749408/how-systemd-tracks-fork-process-with-type-fork что подразумевает, что systemd может предотвратить наследование cgroup при разветвлении.

Это можно обойти?

CentOS7, systemd-219-78.el7_9.5.x86_64.

Обновление: если я понимаю это ответ, ответ может быть Delegate=true. Я не думаю, что это поддерживается в этой системе... Я попробую это дальше.

Обновление: я пробовал это, и никакой разницы не было обнаружено:

$ cat /etc/systemd/system/gitlab-runner.service.d/override.conf
[Оказание услуг]
Делегат=да

Обновление: это может быть альтернативный способ, которым я попробую следующее: https://unix.stackexchange.com/questions/490978/limit-cpu-and-memory-consumption-of-all-x-applications

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.