0
#!/usr/bin/perl
use Foo.pm # no such file

然后由 cron 运行,脚本会出现消息“无法在 @INC 中找到 Foo.pm”。是真的。但是我看不到这条消息(服务器和 cron 记录超出我的控制)并且无法检测到缺少什么文件。

有没有办法将此错误消息重定向到日志文件?STDERR 重定向不起作用,因为在编译时出错

4

3 回答 3

1

我刚刚测试过,以下解决方案确实有效:

./test.pl &> log
cat log

Can't locate Foo.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 
/usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10
/usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./test.pl line 2.
BEGIN failed--compilation aborted at ./test.pl line 2.
于 2013-05-15T10:47:17.030 回答
0
# perl -e 'use foo;' >  /var/log/messages 2>&1
# tail /var/log/messages
Can't locate foo.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
# 
于 2013-05-15T11:30:45.977 回答
0

如果您可以修改 cron 条目,请将标准错误重定向到标准输出或带有符号2>&12>/some/file.

如果这不可能,您可以STDERR在加载模块之前在脚本的开头重新定义。在任何可能失败的语句之前使用BEGIN块:use

#! perl
BEGIN {
    open STDERR, '>', '/my/log/file';
}
use ModuleNotFound;
于 2013-05-15T17:01:36.693 回答