"lvs"をperlスクリプトで実行して出力を解析しようとしています。Linux LVM lvsコマンドはcron perlスクリプトからは失敗しますが、直接cronから動作します
my $output = `lvs --noheadings --separator : --units m --nosuffix 2>&1`;
my $result = $?;
if ($result != 0 || length($output) == 0) {
printf STDERR "Get list of LVs failed (exit result: %d): %s\n",
$result, $output;
exit(1);
}
printf "SUCCESS:\n%s\n", $output;
上記のスクリプトをターミナルウィンドウから実行すると、正常に動作します。私は同じ「LVS --noheadings --separator実行する場合
Get list of LVs failed (exit result: -1):
注任意の出力(stdout +標準エラー出力)
の欠如を:私はそれが失敗したのcron経由で実行する場合--unitsメートルを - nosuffix "コマンドをcronで直接実行すると、うまく実行され出力されます。
open3()を使用するようにperlスクリプトを変更した場合も、出力がなくても同じエラーが発生します。
lvsコマンドに "-d -d -d -d -v -v -v"を追加して冗長/デバッグ出力を有効にすると、ターミナルからperlスクリプトを実行すると表示されますが、 cron/perlで実行しても出力はありません。
Iが、/ usr/binに/ perlのでRHEL 7.2でこれを実行している(5.16.3)
任意の提案?
はい、問題は、cron + perl内で$ PATHに "lvs"がある/ sbinを含めるように設定されていないことです。したがって、 "/ sbin/lvs"と指定すると問題が解決されます。ありがとうございました!!! –