systemd: verifique se um serviço não está sendo executado

2

Para verificar em um script que um serviço não está em execução, tentei

systemctl is-active some.service

que retorna "inativo" e sai do código 3 se o serviço não estiver em execução ou não existir.

Às vezes, porém, ele retorna 'desconhecido' e também o código de saída 3, a explicação para isso pode ser encontrada aqui: link

Status is more complex function with creates a unit in systemd manager. Than you can view its status through is-active until garbage collectors eats it.

Então, basicamente, chamar algo como systemctl status some.service e o coletor de lixo alteram o resultado de is-active , portanto não é confiável.

A recomendação na mesma discussão para usar

systemctl show some.service -p ActiveState

faz uma "promessa de estabilidade para este comando".

No entanto, em um sistema estou recebendo Unit some.service could not be found. e saio do código 1 para um serviço que não existe enquanto em outro sistema estou recebendo ActiveState=inactive e o código de saída 0.

Então, como eu posso verificar de forma confiável se um serviço não está sendo executado?

Se o código de saída não é 0 ou ActiveState = inativo, é toda a verdade?

    
por Torsten Römer 11.08.2017 / 13:16

1 resposta

0

Então, primeiro você deve ter o nome exato do serviço, algumas vezes o nome do serviço é apache e o nome do daemon é httpd, então para evitar isso você deve ter o nome exato do serviço, você pode obter todos os serviços com:

systemctl list-unit-files

para melhorar a pesquisa, você pode usar um grep :

systemctl list-unit-files | grep "part_of_servicename_expected"

exemplo de ambigius state httpd com apache

systemctl list-unit-files | grep -i "apache"

depois disso, se você tiver o resultado, você deve fazer:

systemctl status servicename.service
    
por 11.08.2017 / 14:10

Tags