Estou ciente de seguir o tópico e supostamente uma resposta para ele . Exceto que uma resposta não é uma resposta no sentido genérico. Ele diz qual era o problema em um caso específico, mas não em geral.
Minha pergunta é: existe uma maneira de depurar ciclos de pedidos de maneira genérica ? Por exemplo: existe um comando que descreva o ciclo e o que vincula uma unidade a outra?
Por exemplo, tenho o seguinte journalctl -b
(desconsidere a data, meu sistema não possui RTC para sincronizar a hora):
Jan 01 00:00:07 host0 systemd[1]: Found ordering cycle on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on cvol.service/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on basic.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sockets.target/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on dbus.socket/start
Jan 01 00:00:07 host0 systemd[1]: Found dependency on sysinit.target/start
Jan 01 00:00:07 host0 systemd[1]: Breaking ordering cycle by deleting job local-fs.target/start
Jan 01 00:00:07 host0 systemd[1]: Job local-fs.target/start deleted to break ordering cycle starting with sysinit.target/start
onde cvol.service (aquele que foi apresentado e que interrompe o ciclo) é:
[Unit]
Description=Mount Crypto Volume
After=boot.mount
Before=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/cryptsetup open /dev/*** cvol --key-file /boot/***
[Install]
WantedBy=home.mount
WantedBy=root.mount
WantedBy=usr-local.mount
De acordo com o journalctl, o cvol.service quer o basic.service, exceto que não, pelo menos não obviamente. Existe um comando que demonstraria de onde esse link é derivado? E, em geral, existe um comando que encontre os ciclos e mostre onde cada link do ciclo se origina?
systemd-analyze verify UNIT
para verificar a correção da unidade. Nos bastidores, este comando cria uma instância virtual do systemd e tenta carregar a UNIT especificada como a transação inicial (como se fossedefault.target
). Isso não revelará nenhuma informação nova (em comparação com os logs), mas pelo menos você não precisará reiniciar com a unidade ativada para ver se ela falhar.Você pode visualizar o ciclo com os comandos
systemd-analyze verify
,systemd-analyze dot
eo GraphVizdot
ferramenta:Você deve ver algo assim:
Aqui você pode ver o ciclo:
c.service->b.service->a.service->c.service
Ligações:
fonte
systemd-analyze verify
não existe aqui em uma instalação do debian 8.systemd-analyze verify
disponível desdev216
. tentesystemd-verify
. Isto existe?systemd-analyze verify default.target
em sua própria faz um trabalho decente em mostrar o loop ...etapa 1: execute o comando de verificação para default.target
etapa 2: observe qual serviço ou destino mencionado na mensagem "systemd Quebrando o ciclo de pedidos excluindo trabalho" e exiba sua lista de dependências completa
etapa 3: observe os grupos "depois" e "antes" dentro do arquivo de serviço ou destino normalmente definido em
e encontre os serviços ou destinos conhecidos por serem seqüenciais, mas estão em ordem de saída para este.
exemplo:
é geralmente mercado "depois"
mas "antes"
essa dependência pode ser facilmente observada chamando-se
no entanto, se o arquivo
contém linhas como:
ou
ou ambos simultaneamente, significa que o dbus.service é definido como de saída e está causando um ciclo interminável do sistema.
a cura é simples - altere a palavra "Depois" para "Antes" e vice-versa, se necessário.
fonte