包括了 crontab 與 at 這兩支程式啦!
本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...
建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
不論什麼時候,建立系統可以自動的執行功能都是必須的!您瞭解目前系統在預設的情況中, 每天、每小時、每個月都在做些什麼事嗎?!您瞭解『循環的工作』與『僅進行一次的工作』有什麼不同嗎? 還有還有,如果你想要每年的老婆的生日前一天就發出一封信件提醒自己不要忘記; 又,如果是與初次見面的朋友的約會,又該如何設定啊?看看這一章先!
[root@linux ~]# /etc/init.d/atd restart Stopping atd: [FAILED] Starting atd: [ OK ] # 再設定一下開機時就啟動! [root@linux ~]# chkconfig --level 35 atd on看到那個『 OK 』的字樣就好囉~關於服務的啟動,我們會在後續再加以介紹,如果您真的有興趣, 那麼可以自行到 /etc/init.d/atd 這個 shell script 內去瞧一瞧先! ^_^。 至於那個 chkconfig ,呵呵!您也可以使用 man 先查閱一下啊!我們未來再介紹啦!
[root@linux ~]# at [-m] TIME 參數: -m :當 at 的工作完成後,以 email 的方式通知使用者該工作已完成。 TIME:時間格式,這裡可以定義出『什麼時候要進行 at 這項工作』的時間,格式有: HH:MM ex> 04:00 在今日的 HH:MM 時刻進行,若該時刻已超過,則明天的 HH:MM 進行此工作。 HH:MM YYYY-MM-DD ex> 04:00 2005-12-03 強制規定在某年某月的某一天的特殊時刻進行該工作! HH:MM[am|pm] [Month] [Date] ex> 04pm December 3 也是一樣,強制在某年某月某日的某時刻進行! HH:MM[am|pm] + number [minutes|hours|days|weeks] ex> now + 5 minutes ex> 04pm + 3 days 就是說,在某個時間點『再加幾個時間後』才進行。 範例: 範例一:再過五分鐘後,將 /root/.bashrc 寄給 dmtsai 這個使用者 [root@linux ~]# at now + 5 minutes at> /bin/mail dmtsai -s "testing at job" < /root/.bashrc at> <EOT> <==這裡輸入 [ctrl] + d 就會出現 <EOF> 的字樣!代表結束! job 8 at 2005-09-07 10:47 # 上面這行資訊在說明,第 8 個 at 工作將在 2005/09/07 的 10:47 進行! 範例二:由於機房預計於 2005/09/16 停電,我想要在 2005/09/15 23:00 關機? [root@linux ~]# at 23:00 2005-09-15 at> /bin/sync at> /bin/sync at> /sbin/shutdown -h now at> <EOT> job 10 at 2005-09-15 23:00 # 您瞧瞧! at 還可以在一個工作內輸入多個指令呢!不錯吧!事實上,當我們使用 at 時,at 會給使用者一個 bash shell 讓使用者下達工作指令, 此時,建議你最好使用絕對路徑來下達你的指令,比較不會有問題喔!那我們知道每個指令都可能會有 standard output/standard error 啊,這些可能會輸出到螢幕上面的資訊會跑去哪裡? 呵呵!這些本來應該在螢幕上面出現的資訊通通會以 email 的方式傳送到使用者的 mailbox 裡面去! 而預設如果沒有 stdout/stderr 時,就不會有任何訊息傳送給使用者了。但你可以使用 at -m 這個參數來強制 at 傳送一個執行完畢的 email 訊息給你自己喔! ^_^
[root@linux ~]# atq [root@linux ~]# atrm [jobnumber] 範例一:查詢目前主機上面有多少的 at 工作排程? [root@linux ~]# atq 10 2005-09-15 23:00 a root # 上面說的是:『在 2005/09/15 的 23:00 有一項工作,該項工作指令下達者為 # root』而且,該項工作的工作號碼 (jobnumber) 為 10 號喔! 範例二:將上述的第 10 個工作移除! [root@linux ~]# atrm 10 [root@linux ~]# atq # 沒有任何資訊,表示該工作被移除了!利用 atq 與 atrm 來控制這個 at 的工作吧! ^_^
[root@linux ~]# crontab [-u username] [-l|-e|-r] 參數: -u :只有 root 才能進行這個任務,亦即幫其他使用者建立/移除 crontab; -e :編輯 crontab 的工作內容 -l :查閱 crontab 的工作內容 -r :移除 crontab 的工作內容 範例: 範例一:用 dmtsai 在每天的 12:00 發信給自己 [dmtsai@linux ~]$ crontab -e # 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc #分 時 日 月 週 |<==============指令串========================>|任何使用者只要不被列入 /etc/cron.deny 當中,那麼他就可以直接下達『 crontab -e 』去編輯自己的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 然後以一個工作一行來編輯,編輯完畢之後,輸入『 :wq 』儲存後離開 vi 就可以了! 而每項工作的格式都是『 五個時間參數 實際動作指令 』,那麼那五個時間參數代表什麼呢?
代表意義 | 分鐘 | 小時 | 日期 | 月份 | 週 |
數字範圍 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
特殊字符 | 代表意義 |
* | 代表任何時刻都接受的意思!舉例來說,上表的範例一,那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思! |
, | 代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是:
|
- | 代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作:
|
/n | 那個 n 代表數字,亦即是『每隔 n 單位間隔』的意思,例如每五分鐘進行一次,則:
|
例題:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 發一封信給他,這封信的內容已經寫在
/home/dmtsai/lover.txt 內了,該如何進行? 答:
|
例題:假如每五分鐘需要執行 /home/dmtsai/test.sh 一次,又該如何? 答:
|
例題:假如你每星期六都與朋友有約,那麼想要每個星期五下午 4:30 告訴你朋友星期六的約會不要忘記,則: 答:
|
[dmtsai@linux ~]$ crontab -l 59 23 1 5 * mail kiki < /home/dmtsai/lover.txt */5 * * * * /home/dmtsai/test.sh 30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt # 注意,若僅想要移除一項工作而已的話,必須要用 crontab -e 去編輯~ # 如果想要全部的工作都移除,才使用 crontab -r 喔! [dmtsai@linux ~]$ crontab -r [dmtsai@linux ~]$ crontab -l no crontab for dmtsai看到了嗎? crontab 『整個內容都不見了!』所以請注意:『如果只是要刪除某個 crontab 的工作項目,那麼請使用 crontab -e 來重新編輯即可!』如果使用 -r 的參數,是會將所有的 crontab 資料內容都刪掉的!千萬注意了!
[root@linux ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly <==每小時 02 4 * * * root run-parts /etc/cron.daily <==每天 22 4 * * 0 root run-parts /etc/cron.weekly <==每週日 42 4 1 * * root run-parts /etc/cron.monthly <==每個月 1 號 分 時 日 月 週 執行者身份 指令串看到這個檔案的內容你大概就瞭解了吧!呵呵,沒錯!這個檔案與將剛剛我們下達 crontab -e 的內容幾乎完全一模一樣!只是有幾個地方不太相同:
[root@linux ~]# vi /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4
看到了沒?那個『 , 』分隔的時候,請注意,不要有空白字元!(連續的意思)如此一來,
則可以將每五分鐘工作的流程分別在不同的時刻來工作!則可以讓系統的執行較為順暢呦!