at : 這個工作僅執行一次就從 Linux 系統中的排程中取消;
cron : 這個工作將持續例行性的作下去!

at命令

既然是工作排程,那么自然要有寫入工作的紀錄檔啰!沒錯啦! 我們可以使用 at 這個指令來幫忙寫入工作紀錄檔,工作紀錄檔預設的放置目錄在 /var/spool/at 底下,在寫入 at 記錄檔后,該工作便進入排程當中并等待執行。 當然啦,要讓 /var/spool/at 目錄底下的工作被實際運作,必須要啟動我們上面提到的 atd 那個服務啦!

不過,并不是所有的人都可以進行 at 工作排程喔!為什么?因為安全的理由啊~ 很多主機被所謂的綁架后,最常發現的就是他們的系統當中有很多的怪客程式 (cracker program) 被寫入例行性命令的排程當中了,所以,那些可惡的程式就可能定時或不定時的在你的系統當中工作, 呵呵!所以啰,除非是您認可的帳號,否則先不要讓他們使用 at 吧! 此外,我們可以利用 /etc/at.allow 與 /etc/at.deny 這兩個檔案來進行 at 的使用限制呢! 加上這兩個檔案后, at 的工作情況其實是這樣的:
  1. 先找尋 /etc/at.allow 這個檔案,寫在這個檔案中的使用者才能使用 at ,沒有在這個檔案中的使用者則不能使用 at ( 即使沒有寫在 at.deny 當中 );
  2. 如果沒有 /etc/at.allow 就尋找 /etc/at.deny 這個檔案,若寫在這個 at.deny 的使用者則不能使用 at ,而沒有在這個 at.deny 檔案中的使用者,就可以使用 at 咯;
  3. 如果兩個檔案都不存在,那么只有 root 可以使用 at 這個指令。
上面的情況說明了,其實我們只要有 at.deny 這個檔案存在就好了,因為我們假設系統內的帳號都是懂得操作的使用者, 因此,預設讓他們可以任意使用 at 這個好用的東西!這也是系統的預設值。我們的 FC4 預設也是只有 /etc/at.deny 存在,而且該檔案內并未有任何帳號資料!這表示任何人均可使用 at 啦!不過,萬一你不希望有某些使用者使用 at 的話,將那個使用者的帳號寫入 /etc/at.deny 即可! 一個帳號寫一行。

crontab命令

例題:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 發一封信給他,這封信的內容已經寫在 /home/dmtsai/lover.txt 內了,該如何進行?
答:


     直接下達 crontab -e 之后,編輯成為:
      59 23 1 5 * mail kiki < /home/dmtsai/lover.txt
    那樣的話,每年 kiki 都會收到你的這封信喔!(當然啰,信的內容就要每年變一變啦!)

01 * * * * root run-parts /etc/cron.hourly
五個數字后面接的是 root 喔!沒錯,與 crontab -e 的內容是不太一樣的!這個欄位的 root 代表的是‘ 執行的使用者身份為 root ’當然啰,你 也可以將這一行改寫成其他的身份哩!而 run-parts 代表后面接的 /etc/cron.hourly 是‘ 一個目錄內(/etc/cron.hourly)的所有可執行檔 ’,這也就是說,每個小時的 01 分,系統會以 root 的身份去 /etc/cron.hourly/ 這個目錄下執行所有可以執行的檔案!后面的三行也都是類似的意思!你可以到 /etc/ 底下去看看,系統本來就預設了這四個目錄了!你可以將每天需要執行的命令直接寫到 /etc/cron.daily/ 即可,還不需要使用到 crontab -e 的程式呢!方便吧

基本上, /etc/crontab 這個檔案里面支援兩種下達指令的方式,一種是直接下達指令, 一種則是以目錄來規劃,例如:
  • 指令型態
    01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
    以 dmtsai 這個使用者的身份,在每小時執行一次 mail 指令。
  • 目錄規劃
    */5 * * * * root run-parts /root/runcron
    建立一個 /root/runcron 的目錄,將要每隔五分鐘執行的‘可執行檔’都寫到該目錄下, 就可以讓系統每五分鐘執行一次該目錄下的所有可執行檔。