私のサーバー用の小さなコントロールパネルを開発しています。実行中か停止しているかを確認するコマンドが必要です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
これまでに報告されたすべての問題は、アプリ内の問題(自己エラー処理と報告機能がある可能性がある)またはクライアント側の問題です。
これらのテストを組み合わせると、問題を特定するのに役立ちます。