¿Cómo verifico un bit de estado en un proceso en ejecución?

¿Cómo verifico un bit de estado en un proceso en ejecución?

Bien, aquí está mi dilema: estoy ejecutando el servidor Ubuntu 18.04.3 LTS sin cabeza en un servidor Dell PowerEdge T710 y estoy escribiendo un script bash para poder cambiar fácilmente las versiones de Apache PHP Mod sin tener que seguir usando manualmente: -

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

El comienzo del script utiliza una condición if para verificar si el usuario ha iniciado sesión como una cuenta de usuario o una cuenta raíz usando el bit de estado de UID, es decir: -

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

usando ((UID)) para verificar si el bit es verdadero y usando ((!UID) para verificar si el bit es falso, pero aquí está el problema, quiero agregar un poco más de verificación para asegurarme de que Apache esté realmente en un estado de ejecución, prefiero usar booleano verdadero o falso que usar algo como: -

systemctl status apache2

lo que da mucha producción. ¿Existe un bit de estado para Apache? Luego puedo hacer una verificación para asegurarme de que Apache realmente se esté ejecutando antes de continuar con el cambio de versión de phpmod.

Este es el script que tengo hasta ahora:https://pastebin.com/HyCjbn59

TI no solo necesita verificar la ejecución de Apache, sino también verificar los diversos módulos PHP de Apache para asegurarse de que estén realmente instalados antes de intentar habilitar el módulo correcto, y si no, entonces el script se ejecutará: -

apt install libapache2-mod-php<version>

Respuesta1

Puede utilizar el is-activecomando de unidad systemctlcuyo "[r]devuelve un código de salida 0 si al menos una [unidad] está activa, o un código distinto de cero en caso contrario":

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

Si prefiere usar un parámetro que contiene $?el código de salida del último comando, simplemente puede probar que sea 0:

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

Otras lecturas

Respuesta2

La definición de códigos de salida propios todavía utiliza la misma lógica que @Dessert describe en su respuesta.

#!/bin/bash

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

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

información relacionada