Redhat Linux裡cron的使用方法
來源:互聯網
上載者:User
在Redhat Linux裡,cron的相關設定檔:
/etc/crontab 記錄環境變數(SHELL,PATH,MAILTO,HOME)和系統預先制定的cron任務(cron.hourly/daily/weekly/monthly)。
(當cron任務無法執行時,可以檢查一下這裡的環境變數和命令路徑)
/etc/cron.deny 被記錄在此的使用者不能提交cron任務
/etc/cron.allow 被記錄在此的使用者可以提交cron任務
(這兩個檔案不存在時,只有root有提交cron任務的許可權)
/etc/cron.d/,/etc/cron.daily/、cron.hourly/、/cron.monthly/ 存放系統預先制定的cron任務
/var/spool/cron/ 所有使用者的cron任務,與使用者名稱相對應
/var/log/cron cron的日誌資訊cron的設定檔稱為crontab,是“cron table”的簡寫。cron在三個地方尋找crontab檔案:/etc/crontab,/etc/cron.d/,/var/spool/cron。
crontab檔案的格式:
minute hour day month weekday [username] command
minute 分鐘 0-59
hour 小時 0-23
day 日期 1-31
month 月份 1-12
weekday 星期幾 0-6(0代表星期天)
這些和時間相關的欄位由空格分隔,每個欄位必須指定一個值:
*(星號),意味著所有的允許值
一個整數,精確匹配
兩個被破折號分開的整數,表示範圍
多個被逗號分開的整數或範圍,表示匹配列出的這些值
/n 表示步長,範圍/n
其中“天”由day和weekday確定,都匹配
其中:星號可以匹配所有字元;一個整數必須精確匹配;用短劃線隔開的兩個整數,他們匹配的是值的範圍;
用逗號隔開的整數或者範圍,匹配任何被列到的值。
例如: 45 10 * * 1-5 上午10:45從周一到周五不要把星號放在第一個欄位,除非你想這個命令每分鐘都執行。
weekday與day若同時指定,則滿足二者之一即被執行。
例如:0,30 * 13 * 5 星期五每半小時,以及每月13號每半小時
30 2 * * 1 (cd /users/joe/project; make)
20 1 * * * find /tmp -atime +3 -exec rm -f { } ';'
每天淩晨1:20刪除/tmp目錄中的3天內未被訪問的所有檔案
55 23 * * 0-3,6 /staff/trent/bin/acct-script
除了星期四、五外每天23:55 運行acct-script
crontab命令
crontab [-u user] [-l|-r|-e]
-l 列出使用者的cron任務
-r 刪除cron任務
-e 編輯cron任務
-i 刪除前提示
註:不帶參數的crontab命令將試圖從標準輸入讀取crontab的內容。在這個模式下,如用Control-D來退出的話,會刪除整個crontab內容。應使用Control-C來退出。
crontab [-u user] filename
從檔案匯入crontab任務。
command就是要執行的sh命令,可以是任意有效shell命令,並且不應該加引號。cron 認為command一直是到這一行的末尾,它可以包含空格或定位字元。
cron使用百分比符號(%)來表示command欄位的換行。只有第一個百分比符號前的文本才會包含在實際命令中,其餘行則作為該命令的標準輸入。
例如:
echo The time is now `date` > /dev/console
write garth %Hi Garth % Remember to get a job.
cd /etc; /bin/mail -s "password file" evi < passwd
管理crontab
crontab filename 將filename安裝為crontab檔案,它將替代crontab檔案以前版本。
crontab -e 檢出一個crontab的一個副本,用編輯器開啟,然後將其重新提交給crontab目錄(/var/spool/cron/'username')。
crontab -l 將crontab中內容列在標準輸出上。
crontab -r 刪除crontab。
不帶命令列的crontab將試圖從他自己的標準輸出中讀取crontab內容。如果意外進入,不要試圖使用Ctrl-D退出,那樣會刪除整個crontab內容,而要使用Ctrl-C退出。
對於root,有這樣的命令:crontab -u loki -r 刪除屬於loki的crontab檔案。 控制使用 crontab 命令
/etc/cron.allow /etc/cron.deny檔案控制哪一個使用者可以使用 crontab 命令。root 使用者可以建立、編輯或刪除這些檔案。這些檔案的條目是使用者登入名稱稱,每個名稱佔一行。如果登入標識和多個的登入名稱稱相關聯,這個crontab 命令採用第一個在 /etc/passwd 檔案中的登入名稱稱,而不管當前實際使用哪一個登入名稱稱。而且,要允許使用者啟動 cron 作業,應該使用 chuser 命令將 /etc/security/user 檔案中的守護進程屬性設定為 TRUE。以下關於 cron.allow 檔案的一個樣本:
root
nick
dee
sarah
如果 cron.allow 檔案存在,只有在檔案中出現其登入名稱稱的使用者可以使用 crontab 命令。root 使用者的登入名稱必須出現在 cron.allow 檔案中,如果這個檔案存在的話。系統管理員可以明確的停止一個使用者,通過使用 crontab 命令,同時在cron.deny 檔案中列出使用者的登入名稱。如果只有 cron.deny 檔案存在,任一名稱沒有出現在這個檔案中的使用者可以使用 crontab 命令。
如果以下一個條件成立,使用者將不能使用 crontab 命令:
cron.allow 檔案和 cron.deny 檔案不存在(只允許 root 使用者)。
cron.allow 檔案存在,但使用者的登入名稱並不列在其中。
cron.deny 檔案存在,並且使用者的登入名稱列在其中。
預設情況下,所有使用者都可向cron提交crontab檔案。其預設的使用者設定檔是空的/etc/cron.deny檔案 。如果沒有這兩個檔案的話,只有root才能提交crontab。
重要的是,存取控制是由crontab而不是cron來實現的。如果某使用者可通過其他方式把crontab秘密轉移到適合目錄中去,那麼cron就會盲目地執行該檔案中的命令。
Linux預先安裝好的crontab項主要在/etc/cron.d下,如果想使某項不起作用,可以注釋掉。
另外,還有/etc/cron.daily 每天運行一次的指令碼; /etc/weekly 每周運行一次的指令碼。crond的管理
service crond {start|stop|status|reload|restart|condrestart}
/etc/init.d/crond {start|stop|status|reload|restart|condrestart}常見用途:
清理檔案系統
find / -xdev -name core -atime +7 -exec rm -f { } ';'
刪除一星期都沒訪問過的core映象檔案(程式崩潰時產生的映象檔案)。
find / -xdev -atime +3 '(' -name '#*' -o -name '#*' -o -name '*.CKP' -o -name '*~' -o -name '.nfs~' ')' -exec rm -f { } ';'
刪除以 #,.#或nfs開頭的,或者是以 ~ 以及.CKP結尾的檔案,還有3天未被訪問的檔案,不同類型的臨時檔案和編輯器的備份檔案,都是這一模式的典型代表。
cd /tmp ; find . ! -name . ! -name lost+found -type d -mtime +3 -exec /bin/rm -rf { } ';'
遞迴刪除/tmp下的72小時未修改的所有子目錄。/tmp下的普通檔案會在系統啟動時被系統啟動指令碼刪除,但有些系統不會刪除目錄。