我有一個腳本a.sh
,其中有一個sftp
命令:
echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye
END_SCRIPT
echo "Sftp successfully."
sftp
如果我以交互方式運行它,則會顯示日誌輸出。但是,如果我將其設置在 crontab 中並使用 將 stdout 重定向到文件>
,則只有這兩個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
所以最終也會到達那裡。