2016-04-09 2 views
1

Я пытаюсь запустить «lvs» в perl-скрипте для анализа его вывода.Linux LVM команда lvs не работает из cron perl script, но работает с 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; 

Когда я запускаю вышеуказанный скрипт из окон терминала, он работает нормально. Если я бегу через хрон он терпит неудачу:

Get list of LVs failed (exit result: -1): 

Обратите внимание на отсутствие какого-либо вывода (STDOUT + STDERR)

Если я запускаю тот же «LVS --noheadings --separator: --units м - nosuffix "непосредственно в cron, он работает и выводится просто отлично.

Если я изменяю скрипт perl для использования open3(), я также получаю тот же самый отказ без вывода.

Если я добавлю «-d -d -d -d -d -v -v -v» в команду lvs, чтобы включить вывод verbose/debug, я вижу, что при запуске скрипта perl из терминала, но есть нет выхода при запуске через cron/perl.

Я бегу это на RHEL 7.2 с/USR/бен/Perl (5.16.3)

Любые предложения ???

ответ

0

Попробуйте использовать абсолютный путь к lvs:

my $output = `/sbin/lvs --noheadings --separator : --units m --nosuffix 2>&1`; 
2

Согласно perldoc system, "Возвращаемое значение -1 указывает на ошибку, чтобы запустить программу или ошибку ожидания (2) системный вызов (инспектировать $ по этой причине). «Поэтому причина отсутствия выхода заключается в том, что lvs не запускается успешно.

Учитывая обычный характер проблем, связанных с cron, я бы сказал, что наиболее вероятная причина, по которой он не работает, заключается в том, что он не находится на $PATH, используемом cron. Попробуйте указать полный путь, и если это не сработает, отметьте $! для сообщения об ошибке операционной системы.

+1

Да, проблема в том, что внутри cron + perl $ PATH не был установлен для включения/sbin, где находится «lvs». Таким образом, определение «/ sbin/lvs» устраняет проблему. Спасибо!!! –

Смежные вопросы