web-dev-qa-db-ja.com

コマンドラインからhttpdが実行されているかどうかを確認する方法は?

サーバー用の小さなコントロールパネルで作業しています。 httpdが実行中か停止中かを通知するコマンドが必要です。

おそらく他のサービスにも同じコードを使用するでしょう。

30
user70804

ほとんどの人は、initシステムを通じてhttpd(Apache、Nginxなど)を実行します。これは、パッケージからインストールした場合はほぼ確実です。これらのinitシステムのほとんどすべては、実行中の場合に機能するメソッドを備えています。私の場合、SysVスタイルのinitスクリプトを出荷し、status引数を受け入れるnginxを使用しています。

$ /etc/init.d/nginx status
 * nginx is running

明らかに別のhttpd、スクリプト、またはinitシステムを実行している場合は、若干異なる構文になりますが、手動でhttpdを起動しない限り(これは世界で最悪の考えのようです)、おそらく、ステータスの照会を可能にする、ナイスで管理された起動スクリプトを使用しています。

slm's answer にはこの種の初期化クエリについての詳細がありますが、信頼に関する問題は、プロセスがまだ実行されているかどうかを実際に通知するだけです。 httpdのメインプロセスcouldは実行されていますが、何らかの方法でデッドロックしています。単純な初期化テストをスキップして、行動テストに移ることは、非常に理にかなっています。

Httpdsについて私たちが知っていることの1つは、それらがリッスンすることです。通常はポート*:80、しかしあなたがそうしないなら、あなたはコードに続くコードを適応させることができます。ここでは、awkの出力をnetstatingして、正しいポートでリッスンしているかどうかを確認しています。

$ 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

whichプロセスも実行されていることを確認して、-right httpdが実行されていることを確認することもできます。あらゆる種類のチェックを行うことができました。あなたがなりたい妄想に依存します:)

しかし、それでもhttpdの反映にすぎません。本当にテストしてみませんか?さて、testです。

$ wget --spider -S "http://localhost" 2>&1 | awk '/HTTP\// {print $2}'
200

応答コード(200は "A-Okay!"を意味します)を見ているだけですが、ここでも、出力を調べて実際にテストし、正しく生成されていることを確認できます。

しかし、これでさえ完全ではありません。あなたはlocalhostをチェックしていて、それは200を報告しています、何も問題ありませんか?ビーバーがhttpd(システムの残りの部分ではない)を供給するネットワークケーブルを噛んだ場合はどうなりますか?じゃあ何?!実際にダウンしているときに、稼働時間を報告しています。不正確なステータスデータほど専門的でないものはほとんどありません。

それでは、外部サーバー(理想的には完全に異なる接続、遠く離れた別の銀河)と話して、サーバーに照会するように依頼してみましょう。

$ ssh tank 'wget --spider -S "http://bert" 2>&1' | awk '/HTTP\// {print $2}'
200

この時点までに、報告された問題はアプリ内の問題です(これには独自のエラー-処理と-レポートがあるか、クライアントの側にあります)。

これらのテストの組み合わせは、問題がどこにあるかを特定するのに役立ちます。

28
Oli

ほとんどのLinuxディストリビューションでは、servicesコマンドを普遍的に使用できます。

$ 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、Systemd、Upstart内のさまざまなメソッド

より一般的なサービス管理フレームワークの1つを使用している場合は、次の方法を使用して、それぞれのサービスを一覧表示できます。

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

参考文献

25
slm