Ответы:
Большинство людей запускают свои 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.
$ service <service> status
$ service httpd status
httpd (pid 23569) is running...
Эту же команду можно использовать для всех служб, работающих на индивидуальной основе, или для поиска статуса всех служб.
$ service --status-all
python is stopped
automount (pid 22457) is running...
Avahi daemon is not running
Avahi DNS daemon is not running
crond (pid 23577) is running...
gpm is stopped
hald is stopped
httpd (pid 23569) is running...
...
Если вы используете одну из более типичных структур управления службами, вы можете использовать следующие методы для перечисления служб внутри каждой из них.
SysVinit
$ ls -l /etc/init.d/ | head -10
total 220
-rwxr-xr-x 1 root root 1422 Jan 13 2009 ajaxterm
-rwxr-xr-x 1 root root 3052 Apr 20 2012 autofs
-rwxr-xr-x 1 root root 1877 Apr 13 2011 avahi-daemon
-rwxr-xr-x 1 root root 1824 Apr 13 2011 avahi-dnsconfd
-rwxr-xr-x 1 root root 1926 Feb 22 2012 crond
-rwxr-xr-x 1 root root 14291 Dec 19 2011 functions
-rwxr-xr-x 1 root root 1778 Jan 6 2007 gpm
-rwxr-xr-x 1 root root 1586 Mar 5 2011 haldaemon
-rwxr-xr-x 1 root root 5742 Dec 19 2011 halt
Systemd
$ systemctl list-unit-files --type=service | head -10
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-pstoreoops.service disabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
accounts-daemon.service enabled
alsa-restore.service static
alsa-state.service static
Выскочка
$ initctl list | head -10
avahi-daemon start/running, process 1090
mountall-net stop/waiting
nmbd start/running, process 2045
passwd stop/waiting
rc stop/waiting
rsyslog start/running, process 1088
tty4 start/running, process 1211
udev start/running, process 483
upstart-udev-bridge start/running, process 480
ureadahead-other stop/waiting