GNU/Linux >> Linux の 問題 >  >> Linux

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

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

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

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

slm の回答には、この種の init クエリに関する詳細が記載されていますが、信頼の問題は、プロセスがまだ実行されているかどうかを示すだけです。あなたの httpd のメイン プロセスは できる 実行されていますが、何らかの方法でデッドロックされています。単純な初期化テストをスキップして、動作テストに進むことは非常に理にかなっています。

httpds についてわかっていることの 1 つは、リッスンすることです。通常はポート *: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

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

これらのテストを組み合わせることで、問題がどこにあるかを突き止めるのにも役立ちます。


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、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

参考文献

  • SysVinit から Systemd へのチートシート
  • 起動時に開始するサービスを一覧表示するコマンドは?

Linux
  1. 実行しているLinuxバージョンは何ですか?調べる方法は次のとおりです

  2. Linuxコマンドが何をするかを知る方法

  3. ルートとしてコマンドラインからソフトウェアセンターを実行していますか?

  1. コマンドラインからアクセス許可と所有者を変更する方法

  2. Linux –コマンドラインからインテルアーキテクチャーファミリーを見つける方法は?

  3. 実行している Linux のバージョンを確認するにはどうすればよいですか?

  1. SshでChromiumコマンドラインを強制終了する方法は?

  2. 検索:コマンドが見つかりません

  3. 特定のプロセスの名前空間を見つける方法は?