如果主机出现问题时, 可能负载过高或者服务当掉, 最理想的做法还是要找出原因, 很多时只要修改一些设定便可以。
早前遇到一位客户, 他安装在 VPS 的 Apache 会无故当掉, 间隔由几小时到一天不等, 检查后 Load Average 一点也不高, 当掉后只要重新启动 Apache 便没问题, 初部估计可能是 mpm_prefork 的设定问题。
由于修改后要观察一段时间, 这段时间 Apache 也可能当掉, 便写了这支 Shell Script, 会自动检查 Apache 是否能回应请求, 如果不能便自动重新启动, 并用电邮通知管理员, 以下分享一下, 首先建下以下 Shell Script, 以下会命名为 check-httpd.sh:
check-httpd.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash # Check httpd header checkhttpd=`/usr/bin/curl -s --head --request GET http://localhost | /usr/bin/grep HTTP | /usr/bin/wc -l` if [ $checkhttpd != 1 ] then # restart httpd /usr/bin/systemctl restart httpd sleep 10 # check again recheckhttpd=`/usr/bin/curl -s --head --request GET http://localhost | /usr/bin/grep HTTP | /usr/bin/wc -l` if [ $recheckhttpd == 1 ] then echo "Apache start successfully!" | /bin/mail -s "Apache restarted" you@email.com exit else echo "Apache restart fail!" | /bin/mail -s "Apache restart fail" you@email.com exit fi exit fi |
将上面的程式码的 you@email.com 改为您的电邮, 然后设权限:
# chmod +x check-httpd.sh
最后将 check-httpd.sh 加入 crontab, 每 5 分钟执行一次:
# crontab -e
加入以下一行:
*/5 * * * * /path/to/check-named.sh >/dev/null 2>&1
这个 Shell Script 会检查 http://localhost 是否有回应, 如果没有回应, 会尝试重新启动 Apache。然后再检查一次, 不论是否成功启动, 都会向管理员发出电邮通知。