“systemctl set-property user-1009.slice CPUQuota = 50%” - Falha ao definir propriedades de unidade em user-1009.slice: Unit user-1009.slice não está carregado

1

Estou tentando definir limites por usuário em processos, a maioria deles é executada com sudo --user. Por que o usuário-1001 e o usuário-1008 no meu sistema possuem os arquivos de fatia, mas não consigo obtê-lo no 1009?

# systemctl set-property user-1009.slice CPUQuota=50%
Failed to set unit properties on user-1009.slice: Unit user-1009.slice is not loaded.

# systemctl status user-1009.slice
● user-1009.slice
   Loaded: loaded
   Active: inactive (dead)

Eu tentei criar manualmente o arquivo

# touch /etc/systemd/system/user-1009.slice

# systemctl status user-1009.slice
● user-1009.slice
   Loaded: masked (/etc/systemd/system/user-1009.slice; masked; vendor preset: disabled)
   Active: inactive (dead)

# systemctl set-property user-1009.slice CPUQuota=50%
Failed to set unit properties on user-1009.slice: Unit user-1009.slice is not loaded.

Além disso, isso não faz sentido para mim, o processo de teste (PID 26668) mostra no ps -U 1009, mas ele está sendo executado sob a fatia do usuário-1008 (porque o usuário-1008 usava o sudo para executá-lo?)

# ps -U 1009 ; systemctl status user-1008.slice
  PID TTY          TIME CMD
15727 pts/1    00:00:00 bash
26668 ?        00:00:00 testprocess
● user-1008.slice - User Slice of testuser
   Loaded: loaded (/run/systemd/system/user-1008.slice; static; vendor preset: disabled)
  Drop-In: /run/systemd/system/user-1008.slice.d
           └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-TasksMax.conf
   Active: active since Thu 2018-08-30 19:35:01 EDT; 2 days ago
   CGroup: /user.slice/user-1008.slice
           └─session-1801668.scope
             └─26668 ./testprocess

Pesquisando, tudo o que eu consegui encontrar é pessoas dizendo para se logar como usuário para consertar isso, mas obviamente o usuário tem processos abertos. E eu tentei usar o su - user1009 em outro terminal, mas isso não pareceu ajudar

    
por die4ever2005 02.09.2018 / 04:18

2 respostas

0

Apenas no caso de alguém precisar de uma solução, em vez de usar apenas o sudo, o sudo systemd-run funcionou para mim

$ sudo systemd-run --uid=1009 --slice=user-1009 sleep 10

# ps -U 1009 ; systemctl status user-1009.slice

PID TTY TIME CMD

20199 ? 00:00:00 sleep

● user-1009.slice

Loaded: loaded

Active: active since Sun 2018-09-02 01:46:57 EDT; 2s ago

CGroup: /user.slice/user-1009.slice

      └─run-20198.service

        └─20199 /bin/sleep 10

link

    
por 02.09.2018 / 09:35
0

I'm trying to set per-user limits on processes, most of them are run with sudo --user.

Why do user-1001 and user-1008 on my system have the slice files units, but I can't get it on 1009?

Se você não estiver executando os processos do UID 1009 agora, então systemd (ou tecnicamente logind ) não iniciará a fatia para esse UID.

Além disso, mesmo se você aplicar com sucesso quaisquer configurações enquanto os processos estiverem em execução, eles serão perdidos se todos os processos pararem de ser executados. Porque a unidade de fatia será parada novamente. Às vezes, isso pode ser o que você quer, mas parece que pode ser muito confuso.

Seria mais sensato adicionar as configurações desejadas em um arquivo de configuração, por exemplo, /etc/systemd/system/user-1009.slice.d/cpuquota.conf .

Use systemd-analyze verify user-1009.slice para verificar o arquivo de configuração e systemctl daemon-reload para carregá-lo. Eu acho que a configuração atualizada não terá efeito até que a unidade de fatia tenha sido parada. Você também pode reiniciar a unidade de fatia manualmente, mas isso matará todos os processos em execução dentro dela.

Se você não tem user-1009.slice quando seus processos estão em execução, é porque os processos desse usuário não estão sendo executados dentro de pam_systemd . Isso pode ser porque eles não começaram a usar o PAM. Também pode ser porque o "serviço" do PAM não está configurado para usar o pam_systemd.

sudo / su no Linux deve usar o PAM. E nas configurações que eu vi em sistemas operacionais baseados em RedHat e Debian, ele usa pam_systemd . Mas há um terceiro caso em que pam_systemd não entraria em vigor: se você estiver executando o comando dentro de uma sessão de usuário existente. Consulte o link

Esse último ponto explica um comportamento confuso de su , ou seja, por que você não visualizou nenhum processo em user-1009.slice quando executou manualmente su - user-1009 .

    
por 02.09.2018 / 10:14