Perl脚本在cron作业中显示不同的行为

时间:2012-11-16 16:26:57

标签: perl scripting cron

我正在perl脚本中执行以下命令。

#!/usr/bin/perl

my $MPSTAT="/usr/bin/mpstat";
my $GREP="/bin/grep";
my $FREE = "/usr/bin/free";
my $AWK = "/bin/awk";
my $cpu = `$MPSTAT | $GREP all | $AWK '{print (100 - \$12)}'`;
print "CPU is $cpu";

当我手动运行这个perl脚本时,它正在正确执行并在%(100 - 空闲CPU)中提供正确的 CPU使用率

但是当我作为cronjob执行它时,它总是打印100&似乎$ 12的awk值为0.任何有关它在cron中表现不同的原因都会有所帮助。

2 个答案:

答案 0 :(得分:3)

作为cron的孩子跑步的主要区别是:

  1. 用户ID可能不同(root与普通用户)
  2. 环境几乎是空的,至少差别很大
  3. 第二部分通常意味着由于可能为普通用户设置的LANGLC_*环境变量的值而不是在运行时,程序可能以不同的语言或数字格式输出在cron下(反之亦然)。

答案 1 :(得分:0)

使用@WinnieNicklaus提供的提示找到解决方案

mpstat在cron中给出了不同的结果。

正常执行:

04:53:18 PM  all   49.51    0.00    4.79    2.67    0.02    0.34    0.00    0.00   42.68

在Cron内部:

16:54:01   all   49.51    0.00    4.79    2.67    0.02    0.34    0.00    0.00   42.68

由于PM没有在cron中打印,因此将awk的参数更改为$ 11而不是$ 12时,它开始工作。