web-dev-qa-db-ja.com

OSXはどのようにターミナルでApacheステータスを表示しますか?

Linuxサーバーでapachectl restartと入力すると、restarting[ok]または[fail]行末にあります。それほど多くはありませんが、少なくとも何が起こっているのかはわかっているので、ログを確認できます。

私のOS Xでは何も得られません。すぐ次の行だけ:

sh-3.2# /usr/sbin/apachectl stop   
sh-3.2# /usr/sbin/apachectl start
sh-3.2# 

これらの「デバッグ」機能を有効にするにはどうすればよいですか?

11
mgPePe

Apachectlラッパースクリプトで、最後にこのようなものを貼り付けてはいかがですか。

tail -5 /var/log/httpd/error_log

あなたは通常のスタートアップでこのようなものを見るはずです

  • [2011年4月22日23:39:20] [通知]ダイジェスト:秘密を生成する
    ダイジェスト認証...
  • [2011年4月22日金曜日23:39:20] [通知]ダイジェスト:完了
  • [2011年4月22日23:39:20] [警告] pidファイル
    /mlk/Apache/pid/httpd.pid overwritten-以前のApache実行のクリーンでないシャットダウン?
  • [2011年4月22日23:39:20] [通知] Apache/2.0.63(Unix)DAV/2が設定されている-通常の操作を再開する

それ以外の場合は、エラーの少なくとも一部がここに表示されます。キーフレーズは上記で強調表示されています。

追加:/ usr/sbin/apachectlはrootが所有しています。これを行うには、特権ユーザーである必要があります。 Sudo vi/usr/sbin/apachectl

ファイルの最後に移動し、これを「esac」行と「exit $ ERROR」行の間に挿入します。すなわち。

esac
sleep 2; tail -5 /var/log/httpd/error_log
exit $ERROR

これにより、スクリプトでどのようなアクションを実行しても、最後の数行が出力され、開始を停止し、再起動します。あなたはそれをcase文の始めの部分だけに入れたいかもしれません。

5
Michael Henry

Macでも同じ問題が発生します。 Apacheを起動しようとして何も起こらない場合は、すぐにこのコマンドを実行します。私の場合、問題は常にApache構成ファイルにあるようです。

apachectl configtest
30
Randy Findley

Macのapachectlは、いくつかのlaunchctlコマンドのラッパーです(ファイルを調べるだけです)。残念ながら、httpdの起動で問題が発生しても、launchctlはエラーコードで終了しません。そのため、スクリプトが何かを表示しようとしても、それを表示する簡単な方法はありません。

自分で実行できる基本的なチェックは、apachectl startコマンドの後にApacheプロセスの存在をチェックすることです。

ps aux | grep httpd
8
Sven

MacOSでnetstatコマンドを使用すると、すべてのネットワーク接続が表示されます。 「リッスン」接続のみをフィルタリングして、http(s)サーバーを表示できます。

次のコードでbashファイルを作成できます。

status="$(netstat -at | grep LISTEN | grep *.http)"
count="$(echo "${status}" | grep -Ev "^$" | wc -l)"

if [ ${count} -eq 0 ] ; then
    echo " Apache server is not running"
fi   

echo "${status}" | 
while IFS= read -r line
do
    echo " ${line}"
done

サーバーが停止したときの結果Sudo apachectl -k stopは次のようになります:

Apache server is not running

サーバーが実行されているときの結果Sudo apachectl -k stopは次のようになります:

tcp46      0      0  *.https                *.*                    LISTEN     
tcp46      0      0  *.http                 *.*                    LISTEN     

この例では、2つのサーバーが実行されています。1つはhttpsで、もう1つはhttpです。

0
equiman