httpdが実行されているかどうかをコマンドライン経由で確認するにはどうすればよいですか?


29

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

他のサービスにも同じコードを使用する可能性があります。

回答:


28

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

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

異なるhttpd、スクリプト、またはinitシステムを実行している場合、明らかに構文が少し異なりますが、httpdを手動で起動する(世界で最悪のアイデアのように感じる)場合を除き、おそらく、状態を照会できる素敵な管理された起動スクリプトを使用しています。

slmの答えには、この種のinitクエリについての詳細が含まれていますが、信頼の問題は、プロセスがまだ実行されているかどうかを実際に伝えるだけです。httpdのメインプロセス実行されている可能性がありますが、何らかの方法でデッドロックが発生しています。単純な初期化テストをスキップして、動作テストに進むことは非常に理にかなっています。

httpdsについて知っていることの1つは、彼らが聞くことです。通常はport *: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は "A-Okay!"を意味します)でも、出力を掘り下げて実際にテストし、出力が正しく生成されていることを確認できます。

しかし、これでもそれほど徹底的ではありません。あなたはチェックしていてlocalhost、それは200を報告しています、何も間違っていませんか?ビーバーがhttpdを提供するネットワークケーブル(システムの残りの部分ではない)を噛んだ場合はどうなりますか?じゃあ何?!実際にダウンしているときにアップタイムを報告しています。誤ったステータスデータよりも専門的ではないものはほとんどありません。

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

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

この時点までに報告された問題は、アプリ内の問題(独自のエラー-handlingおよび-reportingを持つか、クライアント側で発生する可能性があります)のいずれかです。

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


3
httpdはどうなりましたか?
クリーク14年

@Creekどういう意味ですか?
オリ14年

4
+1は良い答えですが、OPはhttpdについて質問し、nginxを使用しました
クリーク14年

4
@Creek私の本では、「httpd」は「httpデーモン; Webサーバー」を意味します。特定のものではありません。私が違うやり方をするべきだと思いますか?私はそれを最初に飲み物を買う必要なしにこれ以上徹底的にチェックする方法を知りません。
オリ14年

3
クラシックだと言って飲み物を買えたら OPはApacheのhttpdを
クリーク14年

25

ほとんどの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内のさまざまなメソッド

より一般的なサービス管理フレームワークのいずれかを使用している場合、次の方法を使用して各サービス内のサービスをリストできます。

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

参照資料


私の知る限り、これは正しい答えです。しかし、OP
ラメシュ14年

@Ramesh-OK、Oli's Aも正しいです。もう少し難解です。
slm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.