Maneira conveniente de verificar se o sistema está usando systemd ou sysvinit no BASH? [duplicado]

39

Estou definindo arquivos bash comuns que desejo usar em diferentes distribuições. Eu preciso de uma maneira de verificar se o sistema está usando systemd ou sysvinit (/etc/init.d/). Eu preciso disso, então eu corro o comando apropriado para iniciar o serviço. Qual seria a maneira segura de verificar isso? Eu atualmente verifico a existência do comando systemctl, mas isso é realmente uma opção, pois pode haver o caso em que o comando systemctl possa estar disponível, mas isso não significa necessariamente que o systemd é realmente usado?

Aqui está um trecho do meu script atual:

#!/bin/sh
if [ command -v systemctl >/dev/null ]
then
    systemctl service start
else
    /etc/init.d/service start
fi
    
por phoops 26.03.2014 / 21:36

1 resposta

39

O Systemd e o init possuem pid = 1

pidof /sbin/init && echo "sysvinit" || echo "other"

Verifique se há systemd

pidof systemd && echo "systemd" || echo "other"

    
por 26.03.2014 / 22:16