Permissions
無法通過 cronjob 刪除早於 x 天的文件
我正在使用 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 作業。任何更花哨的東西都最好安排在包裝腳本中。
我添加
find
命令中,這將使它輸出它試圖刪除的文件的名稱(否則它將保持沉默)。