Permissions

無法通過 cronjob 刪除早於 x 天的文件

  • December 27, 2019

我正在使用 crontab 將 MySQL 的所有數據庫備份到單獨的 gnu-zip 文件中。我還想刪除早於 1 天的備份文件。

我正在使用以下命令刪除舊文件,但它只能通過終端工作。如果我為同一命令設置 cronjob,那麼它不起作用。我不知道出了什麼問題。繼續我的命令如下:

find path -type f -mtime +0 -delete

我在設置 cronjob 時也找不到任何錯誤:

0 0 * * * /path/auto_delete_backup_database.sh >/path/auto_delete_backup_database.log

任何幫助將不勝感激。

更新

正如@Kusalananda 提到的我跑了ls -l,結果如下面的螢幕截圖所示

在此處輸入圖像描述

那麼是因為 .sh 文件沒有執行所需的權限嗎?如果是這樣,我該如何授予該權限?

根據您在問題中顯示的內容並在評論中說,您的腳本不可執行且不包含#!-line。

至少,您應該使腳本可執行

chmod +x /path/auto_delete_backup_database.sh

並給它一個適當的#!-line:

#!/bin/sh

(這必須是腳本的第一行,前面沒有空格)。

當腳本不可執行時,它將根本無法用作腳本。嘗試執行這樣的文件會返回“權限被拒絕”錯誤(您的 cron 守護程序很可能已嘗試向您發送電子郵件,告訴您有關此問題的資訊)。

如果沒有#!-line 告訴呼叫 shell 使用什麼 shell 解釋器來執行腳本,它取決於哪個 shell 呼叫它會發生什麼。您應該始終#!在腳本的開頭使用適當的 -line。在這種情況下,由於沒有使用特殊bash功能,因此使用/bin/sh.

您顯然也可以find直接使用 cron 安排命令:

0 0 * * * find path -type f -mtime +0 -print -delete >/path/auto_delete_backup_database.log 2>&1

我認為這適用於單命令 cron 作業。任何更花哨的東西都最好安排在包裝腳本中。

我添加-print到上面的find命令中,這將使它輸出它試圖刪除的文件的名稱(否則它將保持沉默)。

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