Inspecionar status da unidade para unidades de usuário com systemctl como root

2

Eu criei uma unidade de usuário (fatia) e a iniciei. Com:

cytrinox@pollux$ systemctl status --user --full firefox-limits.slice
● firefox-limits.slice - Firefox Slice
   Loaded: loaded (/home/cytrinox/.config/systemd/user/firefox-limits.slice; static; vendor preset: enabled)
   Active: active since Sun 2018-11-25 00:09:14 CET; 37min ago
   CGroup: /user.slice/user-1000.slice/[email protected]/firefox.slice/firefox-limits.slice
           └─run-r791a1fc1147748059accf82ecded4c56.scope
             ├─5291 /home/cytrinox/bin/Firefox/firefox
             ├─5451 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5500 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5517 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             ├─5539 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre
             └─5562 /home/cytrinox/bin/Firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 1 -prefMapSize 452779 -schedulerPre

Nov 25 00:09:14 pollux systemd[858]: Created slice Firefox Slice.

Eu posso inspecionar o status atual.

Mas como, root, como posso obter o status dessa unidade de usuário?

root@pollux:/etc/systemd/system# systemctl status --full firefox-limits.slice
● firefox-limits.slice
   Loaded: loaded
   Active: inactive (dead)
    
por cytrinox 25.11.2018 / 00:50

1 resposta

0

Infelizmente, não, não é possível acessar as unidades que estão sendo executadas no gerenciador de unidades do systemd enquanto são executadas como root ...

É quase possível, executando systemctl --user status como raiz, enquanto define a variável de ambiente XDG_RUNTIME_DIR para apontar para /run/user/<uid> (consulte o código relevante em bus_connect_user_systemd() ), mas infelizmente isso não é suficiente:

# XDG_RUNTIME_DIR=/run/user/1000 systemctl --user status
Failed to connect to bus: Operation not permitted

O problema é que, após conectar-se ao gerenciador de usuários, o systemd verifica se o uid executando systemctl corresponde àquele que possui o soquete para o gerenciador (consulte o código relevante em bus_check_peercred() ).

Portanto, sua melhor opção é usar apenas su para se tornar o usuário, a fim de verificar o status da unidade. Além disso, ao usar su , você ainda precisa definir XDG_RUNTIME_DIR , caso contrário, systemctl pode não conseguir encontrar o soquete para o gerenciador:

# su cytrinox -c 'XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status'

(Ou o comando systemctl status apropriado que você deseja para sua unidade de fatia do Firefox ...)

    
por 30.11.2018 / 05:11

Tags