Я работаю над небольшой панелью управления для моего сервера. Мне нужна команда, которая скажет, httpd
запущен или остановлен.
Вероятно, будет использовать тот же код для других служб.
Большинство людей запускают свои httpd (Apache, Nginx и т. Д.) Через систему инициализации. Это почти наверняка имеет место, если вы установили из пакета. Почти во всех этих системах инициализации есть метод, работающий, если он работает. В моем случае я использую nginx, который поставляется с скриптом инициализации в стиле SysV и принимает status
аргумент, например:
$ /etc/init.d/nginx status
* nginx is running
Очевидно, что если вы используете другую систему httpd, script или init, у вас будет немного другой синтаксис, но если вы не запускаете httpd самостоятельно (что кажется худшей идеей в мире), вы вероятно, используя хороший, управляемый скрипт запуска, который позволит вам запрашивать статус.
В ответе slm есть больше о такого рода запросах инициализации, но проблема с доверием заключается в том, что он только говорит вам, если процесс все еще выполняется. Основной процесс вашего httpd может быть запущен, но в некотором роде заблокирован. Имеет смысл пропустить простые тесты инициализации и перейти к поведенческим тестам.
Мы знаем о httpds одну вещь - они слушают. Обычно через порт *:80
, но если у вас нет, вы можете адаптировать код, следуя коду. Здесь я просто awk
выводю, netstat
чтобы посмотреть, слушает ли он правильный порт.
$ sudo netstat -ntlp | awk '$4=="0.0.0.0:80"'
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2079/nginx
Мы также можем проверить, какой процесс запущен, чтобы убедиться, что работает правильный httpd. Мы могли бы сделать все виды проверок. Зависит от того, каким параноиком ты хочешь быть :)
Но даже это только отражение httpd. Хотите действительно проверить это? Хорошо, давайте проверим это.
$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200
Я просто смотрю на код ответа (200 означает «Хорошо!»), Но опять же, мы могли бы покопаться и на самом деле проверить вывод, чтобы убедиться, что он генерируется правильно.
Но даже это не так тщательно. Вы проверяете, localhost
и он сообщает 200, ничего плохого? Что делать, если бобры жуют через сетевой кабель, который обеспечивает httpd (но не остальную часть системы)? И что?! Вы сообщаете о работоспособности, когда на самом деле не работаете. Немногие вещи выглядят более непрофессионально, чем неверные данные о статусе.
Итак, давайте поговорим с внешним сервером (в идеале на совершенно другом соединении, в другой галактике далеко-далеко) и попросим его запросить наш сервер:
$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200
К этому моменту любые проблемы, о которых сообщалось, являются либо проблемами в приложении (которые могут иметь свои собственные обработки ошибок и отчеты, либо они находятся на стороне клиента).
Комбинация этих тестов может помочь решить проблему.
Вы можете использовать команду services универсально в большинстве дистрибутивов Linux.
пример
Эту же команду можно использовать для всех служб, работающих на индивидуальной основе, или для поиска статуса всех служб.
Различные методы в SysVinit, Systemd и Upstart для перечисления сервисов
Если вы используете одну из более типичных структур управления службами, вы можете использовать следующие методы для перечисления служб внутри каждой из них.
SysVinit
Systemd
Выскочка
Ссылки
источник