Как перенаправить вывод скрипта Perl, выполненного из другого скрипта perl, в файл? - PullRequest
3 голосов
/ 16 сентября 2011

Я запускаю Perl-скрипт через crontab и перенаправляю его вывод в файл:

30 1 * * * /full/path/to/my_script.pl >> /full/path/to/my_log_file

В my_script.pl я выполняю несколько других сценариев perl с помощью команды system ():

#/usr/bin/env perl
system( "/full/path/to/another_script.pl" );

И в этих сценариях я использую «print» для записи в STDOUT:

#/usr/bin/env perl
print "Standard output...\n";

Однако, похоже, что ни один из выходных дочерних сценариев не перенаправляется на my_log_file. Единственный вывод, который я вижу, это исходный сценарий perl. Я что-то упускаю из виду? Это в системе Linux.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Вместо system() используйте qx * ​​1003 *:

print qx( "/full/path/to/another_script.pl" );
0 голосов
/ 16 сентября 2011

Хммм, если вы используете system (), тогда STDOUT должен вернуться в ваш журнал.

У вас есть пример?

Мои непосредственные мысли направлены на вызов system () isn 'на самом деле запускаются другие сценарии - вы используете полный путь к сценарию?Помните, что cron не будет иметь того же $ PATH, что и ваша оболочка, поэтому может не найти скрипты, которые вы пытаетесь запустить, если у них нет полного пути.

Вы также можете перехватить STDERR в своем журнале: 30 1 * ** /my_script.pl 2> & 1 >> my_log_file

...