在平常运维工做中,只要用到squid缓存服务,就会经常被要求清理squid缓存。
好比公司领导要求删一篇新闻,新闻是生成的静态。运维人员把服务器上静态的新闻页面删除了后,不料代理服务器上缓存还有。
缓存服务器若是用的是suqid,下面就对清理squid缓存的方法作一梳理:php
(1)首先在squid的主配置文件中添加acl 列表,并容许受信任的主机有权限清除缓存。
[root@hqtime ~]# vim /etc/squid/squid.conf
.......
.......
acl managercache src 192.168.1.145 127.0.0.1
acl Purge method PURGE
http_access allow managercache Purge
http_access deny Purgehtml
(2)使用squid自带命令squidclient
以下清除squid中一条缓存,-h是受信任清理缓存的服务器ip,-p是指定的squid端口
[root@hqtime ~]# /usr/bin/squidclient -h 192.168.1.145 -p 80 -m PURGE http://www.linuxidc.com/404.html
或者
[root@hqtime ~]# /usr/bin/squidclient -p 80 -m PURGE http://www.linuxidc.com/404.html
-------------------------------------------------------
获取全部缓存 *.jpg 的信息
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:objects | grep jpglinux
取得squid运行状态信息
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:infoweb
取得squid内存使用状况
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:memvim
取得squid已经缓存的列表(当心使用此命令 可能致使崩溃):
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:objects缓存
取得squid的磁盘使用状况:
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:diskdbash
强制更新某个url:
[root@hqtime ~]# /usr/bin/squidclient -p 80 -m PURGE http://www.yejr.com/static.php
-------------------------------------------------------服务器
(3)经过脚本删除
好比编写删除squid缓存的脚本clear_squid_cache.sh,以下:
[root@hqtime ~]# vim clear_squid_cache.sh
#!/bin/sh
squidcache_path="/data1/squid/var/cache"
squidclient_path="/usr/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 80 $url
done运维
[root@hqtime ~]# chmod 755 clear_squid_cache.sh #赋予脚本可执行权限测试
注意:脚本中的下面两个设置:
squidcache_path= 表示squid缓存目录的路径,这个在squid.conf配置文件中能够查到
squidclient_path= 表示squidclient程序所在的路径,默认为squid安装目录下的bin/squidclient
-p 是指定squid 监听的端口
用法:
清除全部Flash缓存(扩展名.swf):
[root@hqtime ~]# sh clear_squid_cache.sh swf
清除URL中包含sina.com.cn的全部缓存:
[root@hqtime ~]# sh clear_squid_cache.sh sina.com.cn
清除文件名为huanqiu.jpg的全部缓存:
[root@hqtime ~]# sh clear_squid_cache.sh huanqiu.jpg
若是对于频繁更新的gif或者什么,能够在crontab中添加对应的命令行
假设上述脚本在/root目录下。以下:
[root@hqtime ~]# crontab -e
0 * * * * /bin/bash /root/clear_squid_cache.sh gif &
这样就会每隔一个小时进行一次刷新操做了,非常方便
若是须要让图片更新人员自行刷新的话,就能够找相应的人员开发web页面,进行对脚本的调用就能够了
脚本效率:
经测试,此脚本清除26000个缓存文件用时2分钟左右,平均每秒可清除缓存文件177个。
(4)还有一种方法,直接删除squid的缓存目录,这样就删除了squid的所有缓存了!
而后从新建立同名空目录作为缓存目录,接着squid -z从新初始化,最后重启squid便可!
查看squid.conf配置文件,好比缓存目录是/data1/squid/var/cache(cache_dir后面设置的)
[root@hqtime ~]# rm -rf /data1/squid/var/cache
[root@hqtime ~]# squid -z
[root@hqtime ~]# /etc/init.d/squid restart