Como verifico um bit de status em um processo em execução?

Como verifico um bit de status em um processo em execução?

OK, aqui está o meu dilema: estou executando o servidor Ubuntu 18.04.3 LTS headless em um servidor Dell PowerEdge T710 e estou escrevendo um script bash para poder alterar facilmente as versões do Apache PHP Mod sem precisar continuar usando manualmente: -

a2dismod php<version>
a2enmod php<version>
systemctl restart apache2

O início do script usa uma condição if para verificar se o usuário está logado como uma conta de usuário ou conta root usando o bit de status do UID, ou seja: -

if ((UID)); then
something here
elif ((!UID)); then
something here
fi

usando ((UID)) para verificar se o bit é verdadeiro e usando ((!UID) para verificar se o bit é falso, mas aqui está o problema, quero adicionar um pouco mais de verificação para ter certeza de que o apache está realmente em um estado de execução, prefiro usar booleano verdadeiro ou falso do que usar algo como: -

systemctl status apache2

o que dá muita saída. Existe um bit de status para o Apache? Então posso fazer uma verificação para ter certeza de que o Apache está realmente rodando antes de continuar a mudança de versão do phpmod.

Este é o script que tenho até agora:https://pastebin.com/HyCjbn59

A TI não só precisa da verificação da execução do Apache, mas também de uma verificação dos vários módulos PHP do Apache para garantir que eles estejam realmente instalados antes de tentar ativar o módulo correto e, se não, o script será executado: -

apt install libapache2-mod-php<version>

Responder1

Você pode usar o is-activecomando unit do systemctlqual “[r] retorna um código de saída 0 se pelo menos uma [unidade] estiver ativa, ou diferente de zero caso contrário”:

if systemctl is-active --quiet apache2; then
  echo running
else
  echo not running
fi

Se você preferir usar um parâmetro que contém $?o código de saída do último comando, você pode simplesmente testar se ele é 0:

systemctl is-active --quiet apache2
if [ $? -eq 0 ]; then
  echo running
else
  echo not running
fi

Leitura adicional

Responder2

Definir códigos de saída próprios ainda usa a mesma lógica que @Dessert descreve em sua resposta.

#!/bin/bash

systemctl is-active -q apache2 && status=TRUE || status=FALSE

case $status in
  TRUE)
    echo do something ;;
  FALSE)
    echo do sothing else ;;
esac

informação relacionada