コマンドラインでhttpdが実行されていることをどのように確認できますか?

コマンドラインでhttpdが実行されていることをどのように確認できますか?

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

他のサービスにも同じコードを使用できます。

答え1

ほとんどの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のさまざまな方法

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

システム初期化

$  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

引用する

答え2

ほとんどの人はinitシステム(Apache、Nginxなど)を介してhttpdを実行します。パッケージからインストールした場合はほぼ確実です。ほとんどすべての初期化システムには、実行時に正しく動作するメソッドがあります。私の場合は、SysVスタイルの初期化スクリプトを提供し、status次のパラメータを受け入れるnginxを使用します。

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

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

slmの答えこの種の初期化クエリに関する追加情報がありますが、信頼の問題は、プロセスがまだ実行されているかどうかを実際に通知できることです。 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

レスポンスコード(「A-Okay!」の場合は200)のみを表示しますが、出力をドリルダウンして実際にテストして正しく生成されたことを確認できます。

しかし、これさえそれほど徹底するわけではありません。確認してみるとlocalhost結果が200なのに問題があるのでしょうか?ビーバーがhttpd(システムの残りの部分ではない)に電力を供給するネットワークケーブルを噛んだとしたらどうなりますか?そして何? !実際のダウンタイムが発生した場合は、稼働時間を報告します。間違ったステータスデータよりも非専門的に見えるものはありません。

それでは、外部サーバー(好ましくはまったく異なる接続、遠く離れた別の銀河系)と話し合い、サーバーに問い合わせるように依頼しましょう。

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

これまでに報告されたすべての問題は、アプリ内の問題(自己エラー処理と報告機能がある可能性がある)またはクライアント側の問題です。

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

関連情報