Я пытаюсь создать внешний помощник acl для squid3, чтобы (надеюсь) сократить некоторые строки конфигурации с моего сервера squid3, и я написал для него простой скрипт python:
#!/usr/bin/python
import sys
import logging
import time
logger = logging.getLogger( 'squid_auth' )
logger.setLevel( logging.DEBUG )
fh = logging.FileHandler( 'spam.log' )
fh.setLevel( logging.DEBUG )
formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
fh.setFormatter( formatter )
logger.addHandler( fh )
def grant ():
sys.stdout.write( 'OK\n' )
sys.stdout.flush()
def deny ():
sys.stdout.write( 'ERR\n' )
sys.stdout.flush()
while True:
line = sys.stdin.readline().strip()
if line:
logger.info( line )
grant()
else:
time.sleep( 1 )
и добавил его в свой squid.conf:
external_acl_type custom_acl %SRC %LOGIN %DST /etc/changemyip/squid/config/acl.py
acl CustomAcl external custom_acl
http_access allow CustomAcl
Путь к скрипту правильный (я могу выполнить его в оболочке), программа имеет права на выполнение и все остальное, но, когда я перезагружаю squid, я получаю эту ошибку примерно 5-6 раз, а затем вылетает squid:
Aug 17 14:08:52 server7 (squid): The custom_acl helpers are crashing too rapidly, need help!
Aug 17 14:08:52 server7 squid[28233]: Squid Parent: child process 28290 exited with status 1
Aug 17 14:08:52 server7 squid[28233]: Exiting due to repeated, frequent failures
Как видите, скрипт просто печатает OK\n
в стандартный вывод, чтобы предоставить всем. Я даже не начал реализовывать в нем какую-либо логику.
Протестировано с версией squid: 3.1.19
У меня была похожая проблема. Мне удалось это исправить, изменив владельца скрипта на пользователя squid и переместив файл из моего домашнего каталога в корневую файловую систему.
У меня все еще была та же проблема, даже после того, как я следовал полезным указаниям @tyrells.
Исправление?
Нам нужно сделать скрипт python исполняемым, выполнив команду ниже.
sudo chmod u+x /path/to/external-acl.py
Итак, чтобы резюмировать вот пошаговые инструкции.
/usr/share/acl.py
sudo chown proxy:proxy /usr/share/acl.py
sudo chmod u+x /usr/share/acl.py
sudo service squid restart