Cron

find -delete 工作正常,但不適用於 cron

  • September 27, 2020

請注意我已經閱讀了所有類似的問題。cron、路徑、環境變數等,但沒有找到可以解決我的特定問題的方法。


我有一個腳本可以進行一些 MySQL 轉儲,然後像這樣刪除舊的轉儲:

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -delete

上面的命令已根據評論的建議從我原來的命令中修改

但是,當 cron 執行此腳本時,這些文件永遠不會被刪除。cron 使用者是 root。

調試說明

  • 如果我手動執行出現命令的腳本,它會按預期刪除它們。
  • 如果我以 root 身份從命令行自行執行上述 find 命令,它會按預期刪除它們(並且使用​​ -print 它會按預期返回超過 5 天的文件列表)
  • 我還在 root 的 crontab 中添加了一個顯式路徑語句,但這

並沒有改變任何東西。

  • Cron 不發送錯誤,如果我將查找操作通過管道傳輸到日誌文件,

則該文件為空或根本沒有創建。

  • 我正在使用 Ubuntu 伺服器 14.04.03 LTS。

問題是它執行時crontab沒有設置。$PATH您實際上可以通過將其添加到通過以下方式打開的文件的頂部來為其提供路徑crontab -e

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

(或任何PATH你喜歡使用的東西)。這意味著您可以避免直接從 cron 指定命令的完整路徑。

您的原始命令存在多個問題。您基本上是在要求 shell 進行萬用字元擴展,而不是find. 其次,您沒有為rm;提供完整的路徑。使用/bin/rmor /usr/bin/rm,它位於系統上的任何位置(請參閱 參考資料which rm)。

find 的第一個參數是“要搜尋的位置”,然後使用各種-<option>s 指定“搜尋查詢”。因此,您要執行的命令的正確格式是:

find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec rm -f {} \;

或者

find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete

如果您沒有PATH像上面那樣指定定義,請使用:

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 -exec /bin/rm -f {} \;

或者

/usr/bin/find "/home/bkp/dbdump" -name "*.gz" -mtime +5 delete

試試這個

find /home/bkp/dbdump -type f -name '*.gz' -mtime +5 -delete

引用自:https://serverfault.com/questions/742704