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スクリプトを手動で実行すると、正しく実行され、適切なCPU使用率(%(100-アイドルCPU))が提供されます。

しかし、cronジョブとして実行すると、常に100が出力され、awkの$ 12が値0を取得しているように見えます。cronでの動作が異なる理由についてのポインタは、役に立ちます。

4

2 に答える 2

3

cronの子として実行する場合の主な違いは次のとおりです。

  1. ユーザーIDは異なる場合があります(ルートユーザーと通常のユーザー)
  2. 環境はほとんど空で、少なくともかなり異なります

2番目の部分は、通常のユーザーには設定されているがcronで実行されている場合(またはその逆)には設定されていない環境変数LANGと環境変数の値が原因で、プログラムが異なる言語または数値形式で出力される可能性があることを意味します。LC_*

于 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の引数を$12ではなく$11に変更すると、機能し始めました。

于 2012-11-16T16:56:05.023 に答える