2013-07-24 128 views
4

我一直在努力解決這個問題。谷歌有很多答案,但他們似乎都沒有解決這個問題。我希望別人有這個問題,並知道如何解決它。無法使用Cron刪除文件

所以問題: 我想刪除比使用cron3天舊文件。

我的crontab:

#  m  h  dom  mon  dow  command 
SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin 
*/1  *  *  *  *  /root/insert.sh 
0  0  *  *  *  /root/backup.sh 
*/1  *  *  *  *  find /root/backups -mtime +3 -exec /bin/rm {} \; 

有了這個crontab的/root/backup.sh每天晚上在午夜運行和工作原理。另外/root/insert.sh(運行php腳本將一些數據移動到另一個文件夾)每分鐘工作。

我去/根/備份和手動鍵入find /root/backups -mtime +15 -exec rm {} \;奏效。它刪除了所有超過15天的文件。

要確認cron是運行此行代碼。我跑tail -f /var/log/syslog | grep CRON(我運行Ubuntu服務器13.04)

Jul 24 07:47:01 myServer CRON[13934]: (root) CMD (find /root/backups -mtime +3 -exec rm {} \;) 
Jul 24 07:48:01 myServer CRON[13937]: (root) CMD (/root/insert.sh) 
Jul 24 07:48:01 myServer CRON[13938]: (root) CMD (find /root/backups -mtime +3 -exec rm {} \;) 
Jul 24 07:49:01 myServer CRON[13954]: (root) CMD (/root/insert.sh) 
Jul 24 07:49:01 myServer CRON[13955]: (root) CMD (find /root/backups -mtime +3 -exec /bin/rm {} \;) 

所以你可以看到它正在運行。我試過把PATH放在我的crontab中。我試過把/bin/rm而不是rm。有人建議確保crontab的末尾有一個CR。它的確如此。

即使它的根的cron我做chmod a+rwx backups所以任何人都可以修改該文件夾。那裏仍然沒有運氣。

我試着在我的crontab rm -fr /root/backups/bin/rm -fr /root/backups並沒有奏效。如果我做/bin/rm -fr /root/backups >> /root/logmeplease.log 2>&1並沒有記錄。

最後,我試圖把它變成shell腳本。

#!/bin/bash 

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

find /root/backups -mtime +5 -exec /bin/rm {} \; 

再次,這在文件的底部有一個CR。這個腳本通過手動運行,但cron不會執行它。我也在頂部嘗試了#!/bin/bash -l#!/bin/bash -x

有沒有真正簡單的東西我錯過了爲什麼我的根的cron不會刪除任何文件?系統日誌顯示它正在運行腳本或命令?

感謝您的任何幫助!

+0

當您使用'bash -x'時,您是否收到帶有腳本腳本的電子郵件? – Barmar

+0

你試過'/ usr/bin/find'而不是'find'嗎? – uzsolt

+2

我認爲這是因爲cron使用sh而不是bash。將第一行'SHELL =/bin/sh'改爲'SHELL =/bin/bash'。這有幫助嗎? – jsp

回答

2

要更健壯,您應該在單獨的腳本文件中編寫find ...。 例如

#! /bin/bash 

/usr/bin/find .... -delete \; 

要測試腳本,而不環境即運行成爲超級用戶,並開始

env -i myCronScript 

,看看會發生什麼。這些是cron運行腳本的條件。

+0

您不必使用單獨的文件,但如果不使用ablsolute路徑,cron *將會失敗。 –

1

cron默認使用sh,請檢查該shell的別名。 你可能會發現,rm命令使用SH-shell時被迫請求PROMT:

[email protected]]# env | grep SHELL 
SHELL=/bin/sh 
[[email protected]]# alias 
... 
alias rm='rm -i' 

這就是爲什麼改變來砸也許會有幫助,因爲沒有那樣的別名。