将perl中的STDOUT / STDERR重定向到txt文件?

时间:2012-12-06 19:47:04

标签: perl shell environment

我正在尝试记录命令的输出:

innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO > $PATH_TO_LOG/log_inc1.txt 2>&1;

但它不会写入文件而是在STDOUT上打印。

这可以工作并记录到文件:

innobackupex $DB_USER_INFO $FULL_BACKUP_FOLDER $SLAVE_INFO > $PATH_TO_LOG/log_full.txt 2>&1;

但是这不会记录到文件:

innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO > $PATH_TO_LOG/log_inc1.txt 2>&1;

我尝试的另一个解决方案是:

open (INC1_RESULT,">$PATH_TO_LOG/log_inc1.txt");
my $incr1_backup_result = `innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO`;
print INC1_RESULT $incr1_backup_result;
close INC1_RESULT;

不起作用,因为它只会在命令完成执行后写入文件。我需要在命令运行时尾随日志。

2 个答案:

答案 0 :(得分:2)

假设在* nix环境中使用bash,尝试将stdout和stderr重定向到文本文件(注意&符号):

innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO &> $PATH_TO_LOG/log_inc1.txt

Introduction to BASH Programming HOWTO中的更多信息。如果您处于不同的环境中,请查看有关流重定向的文档。

-

根据the documentation

  

请注意,innobackupex的STDERR不会写入任何文件。您必须将其重定向到文件,例如,innobackupex OPTIONS 2> backupout.log。

将stderr重定向到文件。 OP注释(在下面的评论中)重定向stderr和stdout并没有按预期工作。

答案 1 :(得分:0)

在那里,现在它应该两者都打印到STDOUT并写入Log -

innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO | tee -a $PATH_TO_LOG/log_inc1.txt

或者只是写入日志

innobackupex --incremental $INC1_BACKUP_FOLDER --incremental-basedir=$BASEDIR_FULL $SLAVE_INFO >> $PATH_TO_LOG/log_inc1.txt