OSX 如何在终端中显示 apache 状态?

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# 

我如何启用这些“调试”功能?

答案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。

相关内容