所以我需要一个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