Назад | Перейти на главную страницу

Squid случайным образом перестает обслуживать запросы. Как я могу решить эту проблему?

Прокси-сервер squid (2.7), который у меня запущен на ubuntu 8.10, перестает принимать новые запросы после того, как некоторое время находится в сети, по причинам, которые я не могу обнаружить. Однако делая squid -k reconfigure немедленно решает проблему.

Теперь я вручную запускаю эту команду, отслеживая журнал, и если я не вижу никакой активности в течение 5 минут, я перезагружаю конфигурацию.

Теперь в поисках решения у меня было несколько идей:

  1. диагностировать первопричину и устранить ее
  2. настроить сценарий для автоматической перезагрузки сценария, если в течение последних 3 минут в access.log нет новых записей.
  3. кропотливо обновите сервер до более новой версии ubuntu, сохраняя сеть в автономном режиме или в нерабочее время, чтобы минимизировать время простоя.

Я обращаюсь к вам за решениями для варианта 2), так как я не понимаю squid достаточно для 1), и я избегаю 3), насколько могу. Любые идеи?

Для теста используйте 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

Я столкнулся с аналогичным поведением в Squid (это было около 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 - так что либо в корневом crontab, либо в системном crontab ...

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

(обратите внимание, что вы не должны редактировать файл crontab на месте - используйте crontab -l> copy_ctb, чтобы получить копию текущего crontab, отредактируйте его, а затем загрузите новую конфигурацию с помощью crontab copy_ctb)