当脚本无法获取 robots.txt 时,我需要重新启动 Apache 和 Varnish,并通过电子邮件发送一些日志,但我收到错误
./healthcheck: 43 [[: not found
我的服务器是 Ubuntu 12.04 64 位
#!/bin/sh
# Check if can fetch robots.txt if not then restart Apache and Varnish
# Send last few lines of logs with date via email
PATH=/bin:/usr/bin
THEDIR=/tmp/web-server-health
[email protected]
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://website.com/robots.txt )
then
# we are up
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [[ -f ~/.apache-was-up ]]
then
# write a nice e-mail
echo -n "Web server down at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Apache Log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2/error.log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "AUTH Log:" >> $THEDIR/mail
tail -n 30 /var/log/auth.log >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/init.d/varnish stop >> $THEDIR/mail 2>&1
killall -9 varnishd >> $THEDIR/mail 2>&1
/etc/init.d/varnish start >> $THEDIR/mail 2>&1
/etc/init.d/apache2 stop >> $THEDIR/mail 2>&1
killall -9 apache2 >> $THEDIR/mail 2>&1
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
# prepare the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
# send the mail
sendemail -o message-content-type=html -f [email protected] -t $EMAIL -u ALARM -m < $THEDIR/mail
rm ~/.apache-was-up
fi
fi
rm -rf $THEDIR
答案1
答案2
我认为这就是您要找的(我更喜欢 /tmp,因为它在重启后会被删除,所以是一个全新的开始)。
#!/bin/sh
# Check if can fetch robots.txt if not then restart Apache and Varnish
# Send last few lines of logs with date via email
PATH=/bin:/usr/bin
THEDIR=/tmp/web-server-health
[email protected]
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://website.com/robots.txt )
then
# we are up
touch /tmp/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [ -f /tmp/.apache-was-up ];
then
# write a nice e-mail
echo -n "Web server down at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Apache Log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2/error.log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "AUTH Log:" >> $THEDIR/mail
tail -n 30 /var/log/auth.log >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/init.d/varnish stop >> $THEDIR/mail 2>&1
killall -9 varnishd >> $THEDIR/mail 2>&1
/etc/init.d/varnish start >> $THEDIR/mail 2>&1
/etc/init.d/apache2 stop >> $THEDIR/mail 2>&1
killall -9 apache2 >> $THEDIR/mail 2>&1
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
# prepare the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
# send the mail
sendemail -o message-content-type=html -f [email protected] -t $EMAIL -u ALARM -m < $THEDIR/mail
rm /tmp/.apache-was-up
fi
fi
rm -rf $THEDIR
答案3
虽然该脚本可能有效,但仍存在一些问题,例如不安全地使用临时文件。
你真的应该看看监控,它是开源的,并且很容易编写规则,根据服务响应重新启动您的 Web 服务。它还可以检测正在运行的进程是否终止(例如其 PID 消失),并且您可以暂时停用检查(例如,当您正在进行服务维护时)。
答案4
这里有关于如何使用 Monit 监控 Varnish 并在其宕机时重新启动它的详细解答。
首先,访问http://www.tecmint.com/how-to-install-and-setup-monit-linux-process-and-services-monitoring-program/获取有关 Monit 的一些基本信息并进行安装。这是一个有用的教程,因为它提供了 RHEL/CentOS 和 Debian/Ubuntu 的默认路径。
二、参观https://www.computerminds.co.uk/articles/monitoring-varnish并按照有关设置 Varnish 监控的说明进行操作。
以下是我的设置中的一些注意事项:
- 我建议使用 URL /varnish-ping 作为 VCL ping URL。这是一个容易记住的逻辑路径。设置完成后,您可以通过
curl 127.0.0.1:80/varnish-ping
从命令行运行并确保它返回 200 响应来测试它。 - 确保您拥有正确的 Varnish pid。如第二篇文章所述,您可以在 init 脚本中找到它。我的实际上是 /var/run/varnish.pid。您可以执行 ls 以确保 Varnish 运行时该文件存在。
- 您可能希望允许访问 Monit Web 界面以帮助进行监控。如果您有防火墙,则首先需要将端口 2812 添加到允许的端口。然后,根据以下条件更改允许访问的 IPhttp://digitizor.com/how-to-enable-monit-web-interface-from-all-ips-and-change-port/。您可以指定自己的远程 IP 而不是 0.0.0.0/8,以获得更高的安全性。请注意,密码是通过 HTTP Auth 传递的,因此您不应使用您希望特别安全的密码。
- 确保 Monit 日志处于活动状态。检查“设置日志”日志以确保其中有类似内容
set log /var/log/monit.log
。 - 如果安装 Varnish 后它没有被添加到系统重启时启动的守护进程列表中,则必须通过 chkconfig(或 Ubuntu/Debian 等效程序)添加它。我运行它
chkconfig --list
以确认它存在。
希望这有助于提出更可靠的替代方案。请注意,您还可以通过 Monit 添加服务的电子邮件监控。以下是有关电子邮件警报的更多详细信息:https://fak3r.com/2010/04/10/howto-use-monit-to-monitor-sites-and-alert-users/