'systemctl status' informações sobre falhas 'Condição ...' desaparecem, como isso é útil?

1

Eu criei uma unidade de teste com uma condição com falha e a iniciei. systemctl status pode mostrar informações sobre a falha de Condição ... mas somente se eu quiser que meu serviço de teste esteja em estado de falha.

# systemctl status test.service -n0
● test.service
   Loaded: loaded (/etc/systemd/system/test.service; static; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2018-07-10 17:01:35 BST; 16s ago
Condition: start condition failed at Tue 2018-07-10 17:01:51 BST; 1s ago
           └─ ConditionKernelCommandLine=not-an-option was not met
 Main PID: 4378 (code=exited, status=1/FAILURE)

O estado falhado era uma maneira de impedir que a unidade fosse coletada e esquecida. Caso contrário, a unidade é esquecida e você não pode ver as informações de condição. E as falhas de condição não são registradas no diário - apenas o estado de falha que eu criei anteriormente.

# systemctl reset-failed test.service
# systemctl status test.service
● test.service
   Loaded: loaded (/etc/systemd/system/test.service; static; vendor preset: disabled)
   Active: inactive (dead)

Jul 10 17:01:35 fedora28-vm systemd[1]: Starting test.service...
Jul 10 17:01:35 fedora28-vm systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Jul 10 17:01:35 fedora28-vm systemd[1]: test.service: Failed with result 'exit-code'.
Jul 10 17:01:35 fedora28-vm systemd[1]: Failed to start test.service.

Então, como você deve usar esse recurso systemctl ? Normalmente, quando você inicia sua unidade, a condição com falha será testada primeiro e o processo de início será ignorado. Portanto, não há chance de entrar em um estado falho.

Testado na versão do systemd v239-120-g0fad72fae.

    
por sourcejedi 10.07.2018 / 18:22

1 resposta

1

Funciona bem quando você permite que sua unidade seja iniciada como parte do processo de inicialização. As unidades são impedidas de serem coletadas como lixo, se dependerem de uma unidade ativa, como multi-user.target .

Eu adicionei essas linhas à unidade

[Install]
WantedBy=multi-user.target

e depois pude usá-lo como queria:

# systemctl enable test.service
# systemctl start test.service
# systemctl status test.service -n0

● test.service
   Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
Condition: start condition failed at Tue 2018-07-10 17:18:21 BST; 3s ago
           └─ ConditionKernelCommandLine=not-an-option was not met
    
por 10.07.2018 / 18:22

Tags