После долгих поисков я наконец нашел способ его отладки.Посмотрите на новый код:
my $now_string = POSIX::strftime "%a %b %e %H:%M:%S %Y", localtime;
open(FILE,">>/new_log_file.log");
$output = `/new_script_path/new_script.pl @ARGV 2>&1`;
if ($? == 0)
{
print FILE "[".$now_string."] Chiled executed succesfuly\n";
} elsif($? == -1)
{
print FILE "[".$now_string."] FAILED to execute\n";
} elsif($? & 127)
{
printf FILE "[".$now_string."] child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without';
} else
{
printf FILE "[".$now_string."] child exited with value %d (%d) [ %s ]\n", $? >> 8, $?, $output;
}
close(FILE);
То, что я сделал, - это захват STDOUT и STDERR команды в обратном канале (документация здесь ) и распечатайте его в файле журнала.
Теперь я нашел это сообщение в файле журнала и обнаружил, что было не так:
[Mon Feb 27 09:40:41 2012] child exited with value 2 (512) [ Can't locate lib.pl in @INC (@INC contains: [long output removed] ) at /new_script_path/new_script.pl line 30.
Я ответил на вопрос, как его отладить (странная часть этого нового кодакод статуса 2, а не 5)
В надежде, что это поможет другим, я расскажу вам, какие у меня были 2 ошибки (пожалуйста, исправьте меня, если я ошибаюсь):
- Я загрузил библиотеку без полного пути.
- Когда я вручную тестировал новый скрипт, я вызывал его только из той же директории, где он находится.