为什么 sftp 对 stdout 隐藏日志?

为什么 sftp 对 stdout 隐藏日志?

我有一个脚本a.sh,其中有一个sftp命令:

echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye

END_SCRIPT
echo "Sftp successfully."

sftp如果我以交互方式运行它,则会显示日志输出。但是,如果我将其设置在 crontab 中并使用 将标准输出重定向到文件>,则将只有两个echo语句的输出。如何从sftp命令中获取日志?

编辑:

我尝试了以下表格,但它也不起作用。

sftp -b 批处理文件.txt[电子邮件受保护](从 cron 重定向)

sftp -b 批处理文件.txt[电子邮件受保护]>> some_file.log (从 cron 重定向 + 从这一行重定向)

我认为问题应该与 sftp 的性质有关,它应该以交互方式运行,如手册页中所述。但我找不到解决方案。

我的分布Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

crontab 条目:

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log

创建日志的时间与 crontab 条目匹配。

ssh版本:

OpenSSH_3.6.1p2, SSH protocols 1.5/2.0, OpenSSL 0x0090701f

编辑:

我发现如果我将脚本文件中 sftp 的输出重定向到文本文件,则会记录来自 sftp 的消息。然后我删除日志文件并使用 cron 安排它。 cron 执行后,生成日志文件,但没有来自 sftp 的消息。相反,它仅包含脚本文件内其他语句的日志。

如果我在脚本文件中重定向 sftp 的输出并以交互方式运行它,则日志完全正常。但是,如果我使用 cron 安排它(crontab 条目中没有重定向,只需安排它),来自 sftp 的日志也会消失。

答案1

从表面上看,输出重定向正在发生,但您可能也想包括stderr。在你的 crontab 中试试这个:

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log 2>&1

注意2>&1最后的。它的意思是:“将文件描述符 2, stderr, 重定向到文件描述符 1, stdout, 所在的位置。”因为您已经重定向stdout到该文件,stderr所以最终也会到达那里。

相关内容