[squid-users] sharing a tidbit

Amos Jeffries squid3 at treenet.co.nz
Wed Apr 29 01:21:16 UTC 2015


On 29/04/2015 9:18 a.m., Brendan Kearney wrote:
> i have 2 squid instances behind HAProxy, balanced using leastconn.  each
> proxy server has a NFS mount under /etc/squid/acls/ where external acls
> are kept.  because the NFS mount is common to both instances, i only
> need to make an update in one place and both proxies will get the
> update.  when i put this together, i wanted a means of reconfiguring
> squid in some sort of automated fashion, based on if the acl files (or
> their contents) were changed.
> 
> below is the script i came up with for that.  i call the script from
> root's crontab once every 5 minutes (mind the wrap):
> 
> */5 * * * * /root/bin/SquidReconfigure #reconfigure squid if ACL files
> have been updated
> 
> the script will create a temp file and write the time of last
> modification in seconds since Epoch to the temp file for tracking.  if
> the value changes, the temp file is updated and a flag is set to
> indicate that a reconfigure is warranted.  when the reconfigure is
> performed, it logs via logger/syslog that a refresh was performed.
> 
> the logic is tested and running on my boxes and works nicely for my
> needs.  because i am a small environment and can deal with the fact the
> proxies are performing these actions at the same time, i don't need to
> stagger the offset for each server.  if your reconfigure action takes a
> long time, you may want to consider what options you have in order to
> continue providing functionally available services.
> 
> #!/bin/bash
> 
> aclDir=/etc/squid/acl
> statFile=/tmp/squidStats
> reconfigure=0
> 
> for aclFile in $(ls $aclDir)
> do
>     previous=$(grep ^$aclFile\  $statFile |awk '{print $2}')
>     current=$(stat -t $aclDir/$aclFile -c %Y)
> 
>     if [ $current != $previous ]
>     then
>         #echo -e $aclFile' \t'"change found"
>         # mind the wrap on the below line
>         sed -i -e "s/$aclFile\ $previous/$aclFile\ $current/" $statFile
>         #echo -e $aclFile' \t'"settting marker"
>         reconfigure=1
>     fi
> done
> 
> if [ $reconfigure = 1 ]
> then
>     #echo "reconfiguring squid"
>     squid -k reconfigure
>     logger -t '(squid-1)' -p 'local4.notice' Squid ACL Refresh
> fi

I'd be using -k check in that setup instead of -k reconfigure. Check
only reconfigures the runnign process if the config is still operational.


Or, you can also script with the squidclient command line tool to send
mgr:reconfigure requests to the proxy. (with a squid -k parse beforehand)

Or, you can set the file(s) on a filesystem trigger so the script only
ever runs when the are changed.


Amos


More information about the squid-users mailing list