在日常運維工作中,只要用到squid快取服務,就會常常被要求清理squid快取。
比如公司領導要求刪一篇新聞,新聞是生成的靜態。運維人員把伺服器上靜態的新聞頁面刪除了後,不料代理伺服器上快取還有。
快取伺服器如果用的是suqid,下面就對清理squid快取的方法做一梳理:
(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 Purge
(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 jpg
取得squid執行狀態資訊
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:info
取得squid記憶體使用情況
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:mem
取得squid已經快取的列表(小心使用此命令 可能導致崩潰):
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:objects
取得squid的磁碟使用情況:
[root@hqtime ~]# /usr/bin/squidclient -p 80 mgr:diskd
強制更新某個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