我正在通过crontab运行perl脚本并将其输出重定向到文件:
30 1 * * * /full/path/to/my_script.pl >> /full/path/to/my_log_file
在my_script.pl中,我正在通过system()命令执行其他几个perl脚本:
#/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系统上。
答案 0 :(得分:1)
而不是system()
,请使用qx:
print qx( "/full/path/to/another_script.pl" );
答案 1 :(得分:0)
嗯,如果使用system(),那么STDOUT应该会在你的日志中结束。
你有一个例子吗?
我的直接想法是系统()调用实际上没有运行其他脚本 - 你是否使用脚本的完整路径?记住cron不会有你的shell所拥有的相同$ PATH,所以可能找不到你试图运行的脚本,除非它们有完整的路径。
您还可以在日志中捕获STDERR: 30 1 * * * /my_script.pl 2>& 1>> my_log_file