為什麼 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 中並使用 將 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所以最終也會到達那裡。

相關內容