我有一个脚本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
所以最终也会到达那里。