Відповіді:
Більшість людей запускають httpd (Apache, Nginx тощо) через систему init. Це майже напевно випадок, якщо ви встановили з пакета. Практично всі ці системи init мають розроблений метод, якщо він працює. У моєму випадку я використовую nginx, який доставляє сценарій init у стилі SysV, який приймає status
аргумент, наприклад:
$ /etc/init.d/nginx status
* nginx is running
Очевидно, що якщо ви використовуєте іншу httpd, скрипт або систему init, у вас буде трохи інший синтаксис, але якщо ви не вручну запускаєте httpd самостійно (що вважається найгіршою ідеєю у світі), ви ймовірно, використовуючи хороший керований сценарій запуску, який дозволить вам запитувати статус.
У відповіді slm детальніше про подібний запит на init, але проблема з довірою полягає в тому, що він справді говорить лише про те, що процес все ще працює. Основний процес вашого 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
До цього моменту будь-які проблеми, про які повідомлялося, є або проблемами в додатку (які можуть мати власні помилки - обробка та -звітування, або вони знаходяться в кінці клієнта).
Поєднання цих тестів може допомогти вирішити проблему там, де це теж питання.
Ви можете використовувати команду послуг універсально для більшості дистрибутивів 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
Системний
$ 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