Bash脚本没有产生所需的结果

时间:2015-03-16 21:57:50

标签: linux bash shell awk

我正在运行一个cron-ed bash脚本来提取每个IP地址提供的缓存命中和字节数。脚本(ProxyUsage.bash)包含两部分:

  1. (uniqueIP.awk)找到唯一的IP并创建一个bash脚本,确实添加命中和字节
  2. 运行每个IP的命中和字节
  3. ProxyUsage.bash

    #!/usr/bin/env bash
    sudo gawk -f /home/maxg/scripts/uniqueIP.awk /var/log/squid3/access.log.1 > /home/maxg/scripts/pxyUsage.bash
    source /home/maxg/scripts/pxyUsage.bash
    

    uniqueIP.awk

    {
      arrIPs[$3]++;
    }
    
    END {
    
      for (n in arrIPs) {
        m++;                               # count arrIPs elements
        #print "Array elements: " m;
        arrAddr[i++] = n;                  # fill arrAddr with IPs
        #print i " " n;
      }
    
      asort(arrAddr);                      # sort the array values
    
      for (i = 1; i <= m; i++) {           # write one command line per IP address
        #printf("#!/usr/bin/env bash\n");
        printf("sudo gawk -f /home/maxg/scripts/proxyUsage.awk -v v_Var=%s /var/log/squid3/access.log.1 >> /home/maxg/scripts/pxyUsage.txt\n", arrAddr[i])
      }
    }
    

    pxyUsage.bash

    sudo gawk -f /home/maxg/scripts/proxyUsage.awk -v v_Var=192.168.1.13 /var/log/squid3/access.log.1 >> /home/maxg/scripts/pxyUsage.txt
    sudo gawk -f /home/maxg/scripts/proxyUsage.awk -v v_Var=192.168.1.14 /var/log/squid3/access.log.1 >> /home/maxg/scripts/pxyUsage.txt
    sudo gawk -f /home/maxg/scripts/proxyUsage.awk -v v_Var=192.168.1.22 /var/log/squid3/access.log.1 >> /home/maxg/scripts/pxyUsage.txt
    

    TheProxyUsage.bash脚本按计划运行并创建pxyUsage.bash脚本。 但是,脚本运行时,pxyUsage.text文件不会使用最新值进行修改。 到目前为止,我每天都在运行pxyUsage.bash,因为我无法弄清楚,为什么结果没有写入文件。

    两个bash脚本都设置为执行。实际上文件权限如下:

    -rwxr-xr-x  1 maxg maxg  169 Mar 14 08:40 ProxySummary.bash
    -rw-r--r--  1 maxg maxg  910 Mar 15 17:15 proxyUsage.awk
    -rwxrwxrwx  1 maxg maxg  399 Mar 17 06:10 pxyUsage.bash
    -rw-rw-rw-  1 maxg maxg 2922 Mar 17 07:32 pxyUsage.txt
    -rw-r--r--  1 maxg maxg  781 Mar 16 07:35 uniqueIP.awk
    

    任何提示都表示赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

sudo(8)命令需要一个伪tty,你没有在cron(8)下分配一个; 以常规方式登录时分配了一个。

不要使用sudo(8),只需将脚本作为正确的用户运行。

如果你不能这样做,那么在root crontab中,做一下这样的事情:

su - username / path / to / mycommand arg1 arg2 ...

这将起作用,因为root可以使用su(1)而无需输入密码。