Existe uma maneira de ver a árvore de execução do systemd?

49

O que quero dizer sob a pergunta é: existe uma maneira de despejar a lista ordenada (como o pstree faz para processos) para ver como o systemd executou o conjunto de unidades fornecido, isto é, a árvore depois que as dependências foram resolvidas e os trabalhos foram enfileirados para a execução? Eu sei que você pode fazer isso analisando dados de estado do systemd, mas existe uma maneira rápida de ver uma árvore como essa? Isso ajudaria muito na investigação de falhas (por exemplo, se você ver que o processo de inicialização estava preso em alguma unidade, você seria capaz de identificar a localização aproximada para uma investigação mais profunda.

    
por galaxy 02.08.2014 / 12:10

3 respostas

59

systemd-analyze é seu amigo. Por exemplo, systemd-analyze critical-chain envia a árvore de bloqueio dos daemons. Meu por exemplo:

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─[email protected] @8.472s +696ms
                            └─dev-sda6.device @8.471s

NetworkManager no exemplo basicamente mantendo o boot inteiro.

Se você quiser ter uma visão mais detalhada, você pode renderizar toda a cadeia de execução em um arquivo svg. systemd-analyze plot > something.svg gera toda a cadeia (mais de 120 módulos) como barras de progresso para o arquivo SVG de alta resolução, que mostra estados bloqueados e outros problemas.

Finalmente, você tem a ferramenta systemd-analyze dot , que gera o arquivo de pontos que gera toda a hierarquia: %código% Com a ferramenta de pontos, você pode gerar arquivos ps e svg.

Todas as ferramentas acima são integradas na ferramenta systemd-analyze, que vem por padrão com o systemd no archlinux, pelo menos. Eu acho que há alguns projetos de terceiros lidando com isso também.

    
por 04.08.2014 / 20:57
12

Pode ainda não responder totalmente à sua pergunta, mas tente com --fuzz option

systemd-analyze critical-chain --fuzz 1h

Note que você também pode especificar a unidade s para ver sua cadeia crítica , para que você não esteja limitado ao multi-user.target

systemd-analyze critical-chain network.target local-fs.target

Espero que isso ajude

    
por 23.10.2015 / 01:30
10

Não tenho certeza se entendi a pergunta corretamente, mas há visualizações em árvore disponíveis com os seguintes comandos:

sudo systemctl status

E também:

sudo systemctl list-dependencies 

Espero que isso ajude:)

Além disso, pode ser útil para outros propósitos construir uma árvore das pastas symlinks systemctl:

tree /etc/systemd/system

Na verdade, foi realmente útil descobrir unidades antigas / com problemas que estavam diminuindo a velocidade de inicialização do meu sistema, para desativá-las posteriormente usando o comando systemctl disable .

EDITAR

Dito isso, eu realmente concordo com o OP que essa funcionalidade básica deve ser fornecida por meio de ferramentas de linha de comando, e não uma ferramenta gráfica ... E se você não puder iniciar o X? Como você lida com seu arquivo svg então?

Na verdade, existe um jeito. Se você não pode usar scp (ferramenta ssh) para buscar seu arquivo em outro computador, fbi pode realmente ajudá-lo:)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

Trabalhei nos meus TTYs. Basta navegar dentro da foto com as setas. Existem opções de zoom, para listar fbi -h .

Novamente, espero que isso ajude. Está disponível em repositórios Archlinux e Ubuntu.

EDIT 2:

fbi não funciona em ssh. Você pode fazer o encaminhamento do X como este ssh -Y user@server , mas você precisa de um servidor X em execução no seu servidor remoto.

A melhor aposta aqui é usar sshfs . Funciona muito bem no userspace, por exemplo com nautilus. Há uma pequena configuração para fazer, veja:

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs [email protected]:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount
    
por 13.02.2017 / 14:02