1

我在 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 - Idle CPU) 为单位提供正确的 CPU 使用率

但是当我将它作为一个 cronjob 执行时,它总是打印 100 并且 awk 的 12 美元似乎得到了 0 的值。任何关于它为什么在 cron 中表现不同的指针都会有所帮助。

4

2 回答 2

3

作为 cron 的孩子运行的主要区别是:

  1. 用户 ID 可能不同(root 用户与普通用户)
  2. 环境几乎是空的,至少完全不同

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

于 2012-11-16T16:30:07.797 回答
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 时,它开始工作。

于 2012-11-16T16:56:05.023 回答