11.3. 設定 cron(8)
前一頁 | 章 11. 設定與調校 | 下一頁

## 11.3. 設定 cron(8)

Contributed by Tom Rhodes.

在 FreeBSD 其中最有用的其中一項工具便是 cron，這個工具會在背景執行並且定期檢查 `/etc/crontab` 是否有要執行的工作然後搜尋 `/var/cron/tabs` 是否有自訂的 crontab 檔案，這些檔案用來安排要讓 cron 在指定的時間執行的工作，crontab 中的每一個項目定義了一個要執行的工作，又稱作 cron job。

這裡使用了兩種類型的設定檔：其一是系統 crontab，系統 crontab 不應該被修改，其二為使用者 crontab，使用者 crontab 可以依需要建立與編輯。這兩種檔案的格式在 crontab(5) 有說明。系統 crontab `/etc/crontab` 的格式含有在使用者 crontab 所沒有的 `who` 欄位，在系統 crontab，cron 會依據該欄位所指定的使用者來執行指令，而在使用者 crontab，會以建立 crontab 的使用者來執行指令。

使用者 crontab 讓個別使用者可以安排自己的工作，`root` 使用者也可有自己的使用者 `crontab` 來安排不在系統 `crontab` 中的工作。

以下為系統 crontab `/etc/crontab` 的範例項目：

    # /etc/crontab - root's crontab for FreeBSD
    #
    # $FreeBSD: head/zh_TW.UTF-8/books/handbook/book.xml 52701 2018-12-20 06:29:19Z rcyu $
    #
    SHELL=/bin/sh
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
    #
    #minute	hour	mday	month	wday	who	command
    #
    */5	*	*	*	*	root	/usr/libexec/atrun

| 以 `#` 字元為首的行代表註解。可在檔案中放置註解提醒要執行什麼動作及為何要執行。註解不可與指令同行，否則會被當做指令的一部份，註解必須在新的一行，空白行則會被忽略掉。
| 等號 (`=`) 字元用來定義任何環境設定。在這個例子當中，使用了等號來定義 `SHELL` 及 `PATH`。若 `SHELL` 被省略，cron 則會使用預設的 Bourne shell。若 `PATH` 被省略，則必須指定指令或 Script 的完整路徑才能執行。
| 此行定義了在系統 crontab 會使用到的七個欄位：`minute`, `hour`, `mday`, `month`, `wday`, `who` 以及 `command`。`minute` 欄位是指定指令要執行的時間中的分，`hour` 指定指令要執行的時，`mday` 是月裡面的日，`month` 是月，以及 `wday` 是週裡面的日。這些欄位必須數值代表 24 小時制的時間或 `*` 來代表所有可能的值。`who` 這個欄位只有系統 crontab 才有，用來指定要用那一個使用者來執行指令。最後一個欄位則是要執行的指令。
| 這個項目定義了該工作所使用的數值，`*/5` 後接著數個 `*` 字元指的是每個月的每一週的每一日的每個小時的每 5 分鐘會使用 `root` 執行 `/usr/libexec/atrun`。 指令可含任何數量的參數，但若指令要使用多行則需以反斜線 “\” 連線字元換行。

### 11.3.1. 建立使用者的 Crontab

要建立一個使用者 crontab 可使用編輯模式執行 `crontab`：

    % crontab -e

這樣會使用預設的文字編輯器來開啟使用者的 crontab，使用者第一次執行這個指令會開啟一個空的檔案，使用者建立 crontab 之後這個指令則會開啟已建立的 crontab 供編輯。

加入這些行到 crontab 檔的最上方來設定環境變數以及備忘在 crontab 中欄位的意思非常有用：

    SHELL=/bin/sh
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
    # Order of crontab fields
    # minute	hour	mday	month	wday	command

然後每一個要執行的指令或 Script 加入一行，指定要執行指令的時間。這個例子會每天在下午 2 點執行指定的自訂 Bourne shell script，由於沒有在 `PATH` 指定 Script 的路徑，所以必須給予完整的 Script 路徑：

    0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

### 提示:

在使用自訂的 Script 之前，請先確定該 Script 可以執行並且使用 cron 在有限的環境變數下測試。要複製一個用來執行上述 cron 項目的環境可以使用：

    env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

在 crontab(5) 有討論 cron 使用的環境變數，若 Script 中含有任何會使用萬用字元刪除檔案的指令，那麼檢查 Script 可正常在 cron 的環境運作非常重要。

編輯完成 crontab 之後儲存檔案，編輯完的 crontab 會被自動安裝且 cron 會讀取該 crontab 並在其指定的時指執行其 cron job。要列出 crontab 中有那一些 cron job 可以使用此指令：

    % crontab -l
    0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

要移除使用在使用者 crontab 中的 cron job 可：

    % crontab -r
    remove crontab for dru? y

前一頁 | 上一層 | 下一頁
11.2. 啟動服務 | 起始頁 | 11.4. 管理 FreeBSD 中的服務

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。