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#
これらの「デバッグ」機能を有効にするにはどうすればよいですか?
Apachectlラッパースクリプトで、最後にこのようなものを貼り付けてはいかがですか。
tail -5 /var/log/httpd/error_log
あなたは通常のスタートアップでこのようなものを見るはずです
それ以外の場合は、エラーの少なくとも一部がここに表示されます。キーフレーズは上記で強調表示されています。
追加:/ 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文の始めの部分だけに入れたいかもしれません。
Macでも同じ問題が発生します。 Apacheを起動しようとして何も起こらない場合は、すぐにこのコマンドを実行します。私の場合、問題は常にApache構成ファイルにあるようです。
apachectl configtest
Macのapachectl
は、いくつかのlaunchctl
コマンドのラッパーです(ファイルを調べるだけです)。残念ながら、httpd
の起動で問題が発生しても、launchctlはエラーコードで終了しません。そのため、スクリプトが何かを表示しようとしても、それを表示する簡単な方法はありません。
自分で実行できる基本的なチェックは、apachectl start
コマンドの後にApacheプロセスの存在をチェックすることです。
ps aux | grep httpd
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です。