要计算的Bash脚本脚本运行的次数

时间:2011-11-22 18:29:15

标签: bash cgi

所以我需要一个bash脚本来显示脚本运行的次数。我显然需要一个环境变量,但我很难搞清楚这一点。注意:这是在CGI文件中的Web服务器上,我基本上希望它计算"页面的数量"加载(计数器)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

环境变量(就像CGI中的任何变量一样)不会真正削减它,因为一旦脚本终止,这些数据就会丢失。

存储计数的最常用方法是通过您的语言提供的调用来使用数据库(如Perl的DBI);您的网站提供商应提供一些此类方法。

我想你实际上可以执行一个客户端来连接和查询数据库,就像你从命令行那样。

缺乏这一点,并假设脚本具有对计算机上某个目录的写访问权限,您可以将其存储到文件中:

#!/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

答案 1 :(得分:2)

以下是几个选项:

  1. 尝试鸡群。请参阅manpage for details
  2. 在固定位置创建一个临时目录,并将其用作锁,因为目录创建是原子的。
  3. 如果可以保证在实际检查计数时没有其他任何内容正在运行,那么您可以附加到文件以增加计数:echo -n . >> $LOGFILE。然后你可以(在保证没有其他人访问它的同时)检查文件的大小以确定实际的数量。
  4. #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