2012-11-16 46 views
1

我在perl脚本中执行以下命令。Perl脚本在cron作业内显示不同的行为

#!/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脚本,它变得正常,并提供在%正确CPU使用率执行(100 - 空闲CPU)

但是,当我将它作为cronjob执行时,它始终打印100 & awk的$ 12看起来是0的值。任何有关cron行为不同的指针都会有所帮助。作为的cron的子运行之间

+1

摆脱'awk'语句并只输出'grep'的整个输出。然后你就可以看到'awk'的输入是否与你期望的不同。 –

+2

如果你从这段代码中删除了'my $',它的有效shell代码。以这种方式编写perl是一件坏事。 – jordanm

+0

@jordanm是的,我同意。但在这里,我刚刚复制了900行Perl脚本中的一小部分。 – pprakash

回答

3

的主要区别是:

  1. 用户ID可能是不同的(根与正常用户)
  2. 环境几乎是空的,至少相当不同

第二部分通常意味着程序可能会以不同的语言或数字格式输出,因为LANGLC_*环境变量的值可能会为普通用户设置,但在c下运行时不会ron(反之亦然)。

+0

但在我的脚本中,我不依赖于任何环境变量/用户依赖。 – pprakash

+1

你的脚本本身不依赖于它们,但是你正在执行的是外部程序。例如,德语语言环境的“免费”输出“Größe”等,英语语言环境的“尺寸”输出。时间,日期和数字格式相同。 –

+0

现在了解。感谢您的澄清。 – pprakash

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开始加工。

+2

这种差异几乎肯定是由于Moritz指出的'LANG'或'LC_ *'环境变量的不同值。 – qqx