nginx 無 ngx_cache_purge 模塊時的刷新方法(awk/python)

前幾天用 php 寫了一個 nginx 無 ngx_cache_purge 模塊時的刷新方法。之所以當時使用 php 而非 shell,是因爲用 md5sum 得到的 MD5SUM 值不對,百思不得其解時只能先用已經驗證對的用了。這個過程中懷疑過 md5 算法是否有不同標準,但是總覺得這種懷疑毫無理由。所以今天重新整理思路,最終驗證出我的疏漏,因此最終形成了如下直接使用 shell 即可完成的清除腳本,不再依賴於 php 環境。

/var/tmp/list.purge是URI列表,即URL去除域名後剩餘的部分,比如:
http://blog.51cto.com/logo.gif
應該去掉 http://blog.51cto.com,最終變成如下樣式:
/logo.gif
每行一個,前後不留空格字符。整個文件不允許有空行。

腳本全文如下:
#!/bin/sh
DIR_CACHE=$(awk '/^proxy_cache_path/{print $2}' /usr/local/nginx/conf/vhosts/cache.conf)
cd ${DIR_CACHE}
awk '{ ("echo -en "$0"|md5sum -")|getline v; split(v, N, " "); line=N[1]; line1=substr(line,32,1);line2=substr(line,30,2);printf("rm -f %s/%s/%s\t#%s\n", line1,line2,line,$0)}' /var/tmp/list.purge | sh

附送一個Python版的 getkey.py:
#!/usr/bin/python
try:
    from hashlib import md5
except:
    from md5 import md5

import sys

m = md5()
for line in sys.stdin.readlines():
        lt = line.strip()
        if not lt:
                break
        m.update(lt)
        ck=m.hexdigest()
        print ('rm -f %s/%s/%s\t#%s') % (ck[-1:], ck[-3:-1], ck, lt)

運行時的 shell 腳本就是:
#!/bin/sh
DIR_CACHE=$(awk '/^proxy_cache_path/{print $2}' /usr/local/nginx/conf/vhosts/cache.conf)
cd ${DIR_CACHE}
cat /var/tmp/list.purge | python /var/tmp/getkey.py | sh


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章