Linux 基礎學習篇 - Red Hat Linux 6.1

Linux 例行性命令的建立 - for Red Hat Linux 6.1

大概在 1999~2000 年期間為了防止自己忘記所作的學習心得紀錄!

最近更新時間: 2001/11/04

1999 年初次接觸 Unix 系統,1999 年底接觸 Red Hat 6.1,而在 2000 開始撰寫一些心得文章,於是有了底下這些文字的產生。 這些文字對大家來說,可能沒什麼,但是對鳥哥來說,這是相當珍貴的!所有鳥站的資料起源,都是從這些文字開始的! 慢慢再將許多的指令分門別類的處理進去!網站的資料彙整,真的相當花費時間啊~

不過對於學習者來說,這些資料真的不要再讀了!因為實在太老舊... 建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。最新文章請前往鳥站首頁查閱囉!

前言

假如你每一天早上 8:00 鐘要伺服器連接上音響,並啟動音樂來喚你起床;而中午 12:00 希望 Linux 可以發一封信到你的郵件信箱,提醒你可以去吃午餐了;另外,在每年的你愛人的生日的前一天,先發封信提醒你,以免忘記這麼重要的一天.....要怎樣達到這個目的呢?其實是很簡單的,只要使用 crontab 就可以啦!
其實,Linux 本身在背景下的工作可是很多的,尤其是網路開放的情況下,建立與取消連線、MySQL 資料庫的即時更新、以及一些例行的系統指令,例如釋放記憶體的工作等等。由於例行的工作非常的多,實在不可能每天都要管理員來手動輸入吧!因此我們就需要瞭解一下 Linux 是如何建立例行性工作的!
crontab 基本上有兩種建立例行性命令的方式,一種是針對所有使用者,可以藉由 crontab -e 的指令來下達工作排程;另一種是針對系統管理員,你可以直接藉由修改 /etc/crontab 這一個文字檔,來直接排程!那 crontab 的主要命令要如何執行呢?待鳥哥慢慢道來!

使用 crontab 指令

建立個人用戶的例行性命令:
假如你需要在每天的正午 12:00 發一封信給你自己,而且信的內容已經寫好了,那要怎樣作呢?而且,另一個假設是,你在 Linux Server 中的權限僅止於一般使用者,並不是 root (管理員)身份,那要怎樣設定你的例行性命令呢?哈哈!那就使用 crontab 這個指令吧!你只要執行 crontab -e 就可以進入 vi 的編輯畫面來編輯你的例行性命令說!
 
[vbird@tsai vbird]# crontab -e

0 12 * * * mail vbird@tsai.adsldns.org < /home/vbird/test.txt

在上面的例子中,輸入 crontab -e 時,會出現一個 vi 畫面,然後你在 vi 畫面中輸入上面的一行字,之後按 :wq 儲存後離開!即可完成編輯!容易吧!那上面那一行字代表什麼意義呢?你可以看到,在真正執行命令之前(就是 mail vbird@tsai.adsldns.org < /home/vbird/test.txt )總共有五個數字,這五個數字分別代表:
分(0-59)
小時(0-23)
日期(1-31)
月份(1-12)
週(0-6)
數字代表的意義 分鐘 小時 日期 月份
範圍 0-59 0-23 1-31 1-12 0-6 (0為星期天)
另外,如果是『 *  』的時候,代表所有數字都適用的意思。所以,你就可以知道我上面那一行寫的意義為何了!那就是不論何月、何日、星期幾的 12 點 0 分時,執行 mail vbird@tsai.adsldns.org < /home/vbird/test.txt 這個命令!還不瞭解?沒關係,我們這裡作幾個例子!
  • 例題一:假如你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 發一封信給他,這封信的內容已經寫在 /home/vbird/lover.txt 中了那你要如何編輯呢?呵呵,使用:
  • [vbird@tsai vbird]# crontab -e

    59 23 1 5 * mail pigpp@tsai.adsldns.org < /home/vbird/lover.txt

    就可以囉!那樣的話,每年 pigpp 都會收到你的這封信喔!(當然囉,信的內容就要每年變一變啦!)
  • 例題二:假設你每隔五分鐘就要去 check 你的一個名為 test.sh 這個批次檔一次!要如何寫呢?
  • [vbird@tsai vbird]# crontab -e

    */5 * * * * /home/vbird/test.sh

    就可以啦!有兩件事要注意一下:(1) 指令的路徑最好是下達絕對路徑,這樣比較不會找不到執行的檔案喔!;(2) 第一個數字 */5 表示『每五分鐘執行一次』的意思!
  • 例題三:假如你每個禮拜五下午 4:30 要告訴朋友星期六的約會不要忘記,如何下達指令?
  • [vbird@tsai vbird]# crontab -e

    30 16 * * 5 mail frend@test.domain.name < /home/vbird/frend.txt

    就成功啦!這樣了不了呀!
察看個人用戶的例行性命令:
如果你一直使用 crontab 這個方法來下達例行性命令的話,有可能有一些指令你會忘記了!那怎辦呢?沒關係,只要下達:
crontab -l (註: -l 是 L 的小寫喔!)
就可以知道你曾經下達的 crontab 的命令囉!
刪除例行性命令:
這個更簡單,使用 crontab -r 就刪除了!

修改 /etc/crontab 檔案

    如果你是系統管理員的話,那麼是否還是需要以 crontab -e 來管理你的例行性命令呢?當然不需要,你只要編輯 /etc/crontab 這個檔案就可以啦!有一點需要特別注意喔!那就是 crontab -e 這個 crontab 其實是 /usr/bin/crontab 這個執行檔,但是 /etc/crontab 可是一個『純文字檔』喔!你可以 root 的身份編輯一下這個檔案哩!
     
    [root@tsai /root]# vi /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

    看到這個檔案的內容你大概就瞭解了吧!呵呵,沒錯!這個檔案與將剛剛我們下達 crontab -e 的內容幾乎完全一模一樣!只是有幾個地方不太相同:
    • MAILTO=root:是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,會將錯誤訊息或者是螢幕顯示的訊息傳給誰?由於 root 並無法在用戶端中收信,因此,我通常都將這個 e-mail 改成自己的帳號,好讓我隨時瞭解系統的狀況!
    • 01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 這一行以後的命令,我們可以發現,五個數字後面接的是 root 喔!沒錯,這一行代表的是『執行的層級為 root 身份』當然囉,你也可以將這一行改寫成其他的身份哩!而 run-parts 代表後面接的 /etc/cron.hourly 是『一個目錄內(/etc/cron.hourly)的所有可執行檔』,這也就是說,個小時的 01 分,系統會以 root 層級的使用者去 /etc/cron.hourly 這個目錄下執行所有可以執行的檔案!後面的三行也都是類似的意思!你可以到 /etc/ 底下去看看,系統本來就預設了這四個目錄了!你可以將每天需要執行的命令直接寫到 /etc/cron.daily 即可,還不需要使用到 crontab -e 的程式呢!方便吧!
    好!你現在大概瞭解了這一個咚咚吧!OK!假設你現在要作一個目錄,讓系統可以每 2 分鐘去執行這個目錄下的所有可以執行的檔案,你可以寫下如下的這一行在 /etc/crontab 中:
      */2 * * * * root run-parts /etc/cron.min
    當然囉, /etc/cron.min 這個目錄是需要存在的喔!那如果我需要執行的是一個『程式』而已,不需要用到一個目錄呢?該如何是好?例如在偵測網路流量時,我們希望每五分鐘偵測分析一次,可以這樣寫:
      */5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/net/mrtg.cfg
    沒有了 run-parts 就是代表『一個檔案』的意思啦!
    如何!?建立例行性命令很簡單吧!如果你是系統管理員的話,直接修改 /etc/crontab 這個檔案即可喔!又便利,又方便管理呢!
2002/01/01以來統計人數
伺服器篇文件
各版本彙整說明
CentOS 6.x