ほとんどの人は、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 へのチートシート
- 起動時に開始するサービスを一覧表示するコマンドは?