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

Хорошо, вот моя дилемма, я запускаю безголовый сервер 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, но и проверка различных модулей PHP apache, чтобы убедиться, что они действительно установлены, прежде чем пытаться включить правильный модуль, а если нет, то сценарий выполнит:-

apt install libapache2-mod-php<version>

2 ответа

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

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

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

Определение собственных кодов выхода по-прежнему использует ту же логику, которую @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
Другие вопросы по тегам