所以我需要一個bash腳本來顯示腳本運行的次數。我顯然需要一個環境變量,但我很難解決這個問題。注意:這是在一個CGI文件中的Web服務器上,我基本上希望它計算「頁面」加載的次數(一個計數器)。Bash Script to Count腳本運行次數
感謝您的幫助!
所以我需要一個bash腳本來顯示腳本運行的次數。我顯然需要一個環境變量,但我很難解決這個問題。注意:這是在一個CGI文件中的Web服務器上,我基本上希望它計算「頁面」加載的次數(一個計數器)。Bash Script to Count腳本運行次數
感謝您的幫助!
一個環境變量(像真正的CGI中的任何變量)不會真正切割它,因爲腳本終止後這些數據會丟失。
存儲計數最常用的方法是通過您的語言提供的調用來使用數據庫(如DBI for Perl);您的網站提供商應該提供一些這樣的方法。
我想你可以實際執行一個客戶端來連接並查詢數據庫就像你從命令行。
缺乏這一點,假設劇本有寫權限到某個目錄在機器上,你可以將它保存到一個文件:
#!/bin/bash
file="magic_path/count.cnt"
if [ -e ${file} ]; then
count=$(cat ${file})
else
count=0
fi
((count++))
echo ${count} > ${file}
echo Loaded ${count} times
記住,這樣的腳本可能會有錯誤,你(或我)可能忽略了。值得注意的是@James_R_Ferguson在下面的評論,指出我的例子中的race condition。
這裏有幾個選項:
echo -n . >> $LOGFILE
。然後,您可以(同時保證沒有其他人訪問它)檢查文件的大小以確定實際計數。的#2一個例子:
TEMPDIR_LOCK=/path/to/fixed/lock/dir
mkdir $TEMPDIR_LOCK
while [[ $? != 0 ]] ; do
# sleep, usleep, or busy loop
mkdir $TEMPDIR_LOCK;
done
# read and increment count in some file
rm -f $TEMPDIR_LOCK
非常好。我不知道Linux的flock(),並且會使用Perl。 – JRFerguson
嚴格地說,這裏有一個一流的比賽條件。爲了正確的計數,你需要一個專用鎖來防止計數器文件。 – JRFerguson
輝煌的一點;我想不出一種方法來做到這一點,假設你需要處理的只是孤獨的CGI腳本而沒有後端。 – gamen
@garmen:我想,使用Fcntl模塊的一個簡單的Perl腳本和獨佔的鎖定應該就足夠了。 – JRFerguson