我正在运行一个cron-ed bash脚本来提取每个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
{
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])
}
}
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
任何提示都表示赞赏。感谢。
答案 0 :(得分:1)
sudo(8)命令需要一个伪tty,你没有在cron(8)下分配一个; 做以常规方式登录时分配了一个。
不要使用sudo(8),只需将脚本作为正确的用户运行。
如果你不能这样做,那么在root crontab中,做一下这样的事情:
su - username / path / to / mycommand arg1 arg2 ...
这将起作用,因为root可以使用su(1)而无需输入密码。