Squid 随机停止处理请求。我该如何解决这个问题?

Squid 随机停止处理请求。我该如何解决这个问题?

我在 ubuntu 8.10 上运行的 squid (2.7) 代理在在线一段时间后停止接受新请求,原因我不知道。但是执行此操作可以squid -k reconfigure立即解决问题。

现在我通过监控日志手动运行此命令,如果 5 分钟内没有看到任何活动,我就会重新加载配置。

现在,在寻求解决方案的过程中,我有几个想法:

  1. 诊断根本原因并消除它
  2. 设置一个脚本,如果过去 3 分钟内 access.log 中没有新条目,则自动重新加载脚本
  3. 在保持网络离线或非工作时间时,费力地将服务器升级到较新的 ubuntu 版本,以最大限度地减少停机时间。

我向您寻求选项 2) 的解决方案,因为我对 1) 的 Squid 了解不够,而且我尽可能避免使用 3)。有什么想法吗?

答案1

我曾经发现过鱿鱼有类似的行为(大约 5 年前 - 从未弄清楚原因)但就我的情况而言,它会在启动 2-3 天后开始变慢。

从 cron 运行的类似程序应该会给出它完全锁定所需的行为(假设它停止写入日志文件):

 #!/bin/bash

 LOGFILE=/var/log/cache.log
 # you may need to change the above to point to your logfile
 LASTRUN=/var/local/squidcheck
 # above can be whatever - but dir must exist

 if [ ! -f ${LASTRUN} ] ; then
      touch ${LASTRUN}
 fi
 if [ ${LASTRUN} -nt ${LOGFILE} ] ; then
       /usr/sbin/squid -k reload
 fi
 touch ${LASTRUN}

这需要以 root 身份运行 - 因此可以在 root crontab 或系统 crontab 中运行...

 */5 * * * * /path/to/shellscript

(请注意,您不应就地编辑 crontab 文件 - 使用 crontab -l >copy_ctb 获取当前 crontab 的副本,编辑它,然后使用 crontab copy_ctb 加载新配置)

答案2

为了测试使用 wget 和 http_proxy

http_proxy="http://127.0.0.1:3128" wget http://ya.ru -O /dev/null

重新启动:

http_proxy="http://127.0.0.1:3128" wget http://ya.ru -O /dev/null || squid -k reload

相关内容