Как проверить бит состояния запущенного процесса?

Как проверить бит состояния запущенного процесса?

Итак, вот моя дилемма: я использую headless-сервер Ubuntu 18.04.3 LTS на сервере Dell PowerEdge T710 и пишу bash-скрипт, чтобы можно было легко менять версии Apache PHP Mod без необходимости вручную использовать:-

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

В начале скрипта используется условие if для проверки того, вошел ли пользователь в систему как пользовательская учетная запись или как учетная запись root, с использованием бита состояния UID, то есть:

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

использование ((UID)) для проверки истинности бита и использование ((!UID) для проверки ложности бита, но вот в чем проблема: я хочу добавить немного больше проверок, чтобы убедиться, что Apache действительно находится в рабочем состоянии. Я бы предпочел использовать логические значения true или false, чем использовать что-то вроде:-

systemctl status apache2

что дает много выходных данных. Есть ли бит статуса для apache? Тогда я могу сделать проверку, чтобы убедиться, что apache действительно запущен, прежде чем продолжить изменение версии phpmod.

Вот сценарий, который у меня есть на данный момент:https://pastebin.com/HyCjbn59

ИТ-специалистам необходимо не только проверить работу Apache, но и проверить различные модули Apache PHP, чтобы убедиться, что они действительно установлены, прежде чем пытаться включить нужный модуль. Если нет, то скрипт выполнит:

apt install libapache2-mod-php<version>

решение1

Вы можете использовать is-activeкоманду unit, systemctlкоторая «[r]возвращает код выхода 0, если хотя бы один [unit] активен, или ненулевой код в противном случае»:

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

Если вы предпочитаете использовать параметр, содержащий $?код выхода последней команды, вы можете просто проверить его на наличие 0:

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

дальнейшее чтение

решение2

Определение собственных кодов выхода по-прежнему использует ту же логику, которую @Dessert описывает в своем ответе.

#!/bin/bash

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

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

Связанный контент