我注意到,在我的 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#
我如何启用这些“调试”功能?
答案1
在 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 被覆盖 —— 上次 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 语句的开始部分。
答案2
我的 Mac 也遇到了同样的问题。每当我尝试启动 Apache 却没有任何反应时,我都会立即运行此命令。就我而言,问题似乎总是出在 Apache 配置文件中。
apachectl configtest
答案3
apachectl
在 Mac 上,它是一些launchctl
命令的包装器(只需查看文件即可)。遗憾的是,当启动出现问题时,launchctl 不会以错误代码退出httpd
,因此即使脚本尝试显示任何内容,也无法轻松显示任何内容。
您可以自己执行的一项基本检查是在命令之后检查 Apache 进程是否存在 apachectl start
。
ps aux | grep httpd
答案4
在 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
在这个例子中,我有两个服务器正在运行,一个使用 https,另一个使用 http。