Linux

來自 CRONTAB 作業的管道命令輸出刪除超過 5 天的文件

  • October 28, 2022

我想執行 CRONTAB 作業以刪除文件夾中超過 5 天的文件**,並將命令輸出通過管道傳輸到文件以防出錯**。

此命令在從命令行執行時刪除文件:

/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \;

但是,當我將它添加到它以獲取 stdout 和 stderr 管道時,它失敗了。

/usr/bin/find /mnt/SQL_Backups/* -mtime +5 -exec rm {} \; > /mnt/output/CRONDeleteFiles.txt 2>$1

從命令行,錯誤是

-bash: $1: 不明確的重定向

從 CRONTAB 電子郵件錯誤消息中,我收到此錯誤

/bin/sh: 1: 無法創建:目錄不存在

我懷疑這與我的管道程式碼有關?

這樣做的正確方法是什麼?

stderr 到 stdout 被重定向2>&1,而不是2>$1像您的範例中那樣。

你可以寫信給記錄器,

find /mnt/SQL_Backups/* -mtime +5 -print -delete 2>&1 | logger -t rmsqlbackups

因為我沒有-p user.info在我的系統上提供優先級或設施(例如),所以這會被寫入/var/log/messages其中。2>&1擷取stderr以及stdout。_

或者使用您自己的方法並寫入文件,儘管我懷疑您可能想要追加(>>)而不是輸出(>),在這裡我已經在所有輸出前面加上目前日期/時間,以便您可以看到在以下情況下被刪除的內容:

( date; find /mnt/SQL_Backups/* -mtime +5 -print -delete; echo ) >> /mnt/output/CRONDeleteFiles.txt 2>&1

引用自:https://unix.stackexchange.com/questions/722809