サーバー用の小さなコントロールパネルで作業しています。 httpd
が実行中か停止中かを通知するコマンドが必要です。
おそらく他のサービスにも同じコードを使用するでしょう。
ほとんどの人は、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
の出力をnetstat
ingして、正しいポートでリッスンしているかどうかを確認しています。
$ 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
この時点までに、報告された問題はアプリ内の問題です(これには独自のエラー-処理と-レポートがあるか、クライアントの側にあります)。
これらのテストの組み合わせは、問題がどこにあるかを特定するのに役立ちます。
ほとんどの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...
...
より一般的なサービス管理フレームワークの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