在平常運維工做中,只要用到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