我正在尝试为 squid3 创建一个外部 acl 助手,以(希望)减少我的 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
脚本的路径是正确的(我可以在 shell 中执行它),程序具有执行权限等等,但是,当我重新加载 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
到 stdout 以授予所有人。我甚至还没有开始为其实现任何逻辑。
使用 squid 版本进行测试:3.1.19
答案1
我遇到了类似的问题。我设法通过将脚本的所有权更改为 squid 用户并将文件从我的主目录移动到根文件系统中的某个位置来修复它。
答案2
即使按照@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
- 重新启动 squid。
sudo service squid restart