linux - Bash 脚本没有产生预期的结果

标签 linux bash shell awk

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

  1. (uniqueIP.awk) 找到唯一的 IP 并创建一个 bash 脚本,将命中数和字节数相加
  2. 运行每个 IP 的点击数和字节数

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

唯一IP.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

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

最佳答案

sudo(8) 命令需要一个伪终端,而您在 cron(8) 下没有分配伪终端;您确实在以通常方式登录时分配了一个。

与其搞混 sudo(8),不如以正确的用户身份运行脚本。

如果您不能这样做,那么在根 crontab 中,执行如下操作:

su - 用户名/path/to/mycommand arg1 arg2...

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

关于linux - Bash 脚本没有产生预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29087700/

相关文章:

macos - 使用 mdls 命令生成元数据报告

regex - 使用 bash 脚本查找 $...$ 分隔符之间的所有文本

linux - mkcert 证书不适用于本地 IP 地址

linux - Xubuntu LTS 16.0.4 无法识别 bash 脚本

linux - 脚本与 ./file_name 一起工作,但是当我使用 sh file_name 启动它时出现错误

bash - 如何在curl的请求 header 中设置环境变量?

perl - 如何在 Perl 中实时读取外部命令的输出?

c - 如何获取 __LINE__ 报告的整个字符串

bash - Bash 中的临时输入重定向

linux - 如何同时使用 Bumblebee 和 QtCreator?