Ict-創新/LPI/107.2
考生應能夠使用 cron 或 anacron 定期執行作業,並使用 at 在特定時間執行作業。
關鍵知識領域
- 管理 cron 和 at 作業。
- 配置使用者對 cron 和 at 服務的訪問許可權。
cron 是 UNIX 系統上的定時作業。對於任何需要定期執行的管理任務,例如備份和網路服務,cron 機制是最佳方式。本節介紹 cron、anacron 和其他類似機制。
cron 機制由 crond 守護程序和一組表格組成 - crontabs - 描述要完成的工作、時間和頻率。守護程序由 init 啟動,每分鐘喚醒一次,並檢查 crontabs 以確定要執行的操作。使用者使用 crontab 命令管理 crontabs。
Cron 作業可以作為 shell 指令碼執行,並且更適合設計為不接受引數。
crontabs
要建立 crontab,使用 -e(表示“編輯”)選項的 crontab 命令將開啟一個文字編輯器,您可以在其中指定 cron 作業的規範。每個 crontab 條目將包含六個欄位
分鐘、小時、每月第幾天、一年中的月份、一週中的星期幾和要由 sh 執行的字串。
時間欄位的相應範圍是:0-59、0-23、1-31 和 1-12、0-6(星期日=0)。
注意:對於所有時間欄位,您可以指定一個範圍,或一個時間單位。您可以使用短名稱指定一週中的某一天:sun、mon、tue 等。
最後一個欄位將始終被解釋為要傳遞給 Bash 的字串。
Crontabs 可以使用特殊字元,例如 % = 換行符,但必須以反斜槓 (\) 開頭。第一個 % 之前的行將傳遞給 shell,而 % 之後的任何行將作為標準輸入傳遞。
Crontab 示例
|
0,30 20-23 * 8 mon-fri /home/tux/backup.sh |
在這裡,備份 shell 指令碼將在 8 月的每個週一到週五的下午 8 點到 11 點之間的 0 分和 30 分(每 30 分鐘)執行。有關指定時間的其他方法的詳細資訊,請參閱 crontab(5) 手冊頁。有關如何指定時間的更多詳細資訊,請參閱 crontab 手冊頁。
Cron 作業輸出通常以電子郵件的形式傳送給設定 cron 作業的使用者。通常,與其他系統程序一樣,syslog 機制將捕獲 cron 作業執行的操作。下面是一個郵件報告的示例。
|
From tux@it.northpole.com Mon Jul 2 23:00:02 2010 Date: Mon, 2 Jul 2010 23:00:01 -0400 From: root@it.northpole.com (Cron Daemon) Subject: Cron <tux@it> /home/tux/backup.sh Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/tux> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=tux> X-Cron-Env: <USER=tux>
|
crontabs 的位置
所有 crontabs 都儲存在 /var/spool/cron/*建立它的使用者名稱稱* 中。因此,crontab 是一個 suid 程式,它只能由具有 root 許可權的使用者執行。
cron 機制還會檢查一些其他目錄,例如 /etc/crontab 和 /etc/cron.d。由於這些不是使用者 crontabs 而是系統 crontabs,因此它們在“day”和“command”之間多了一個欄位。此欄位僅定義命令應為哪個使用者執行(通常情況下為 root)。
/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 |
在這種情況下,cron 作業由run-parts命令完成,而 /etc/crontab 只控制時間安排。
注意:還要注意,crontab 可以包含在命令執行之前設定的 shell 變數。所有這些 cronjobs 都是為使用者 root 執行的。
Anacron - 用於非 24/7 執行的機器
雖然 cron 機制非常適合持續執行的計算機系統,並且可以安排每小時執行的作業,但某些系統可能需要不時關閉。因此,您只能安排每天、每週或每月執行的作業。一種實現此目的的機制稱為 anacron (表示“過時的 cron”)。
Anacron 將在 /var/spool/anacron 中保留時間戳檔案,作為記錄作業執行時間的記錄方式。Anacron 透過檢查自上次執行作業以來是否已過去所需的天數來工作,然後確定是否需要執行作業。anacrontab 儲存在 /etc/anacrontab 中,並且可能包含環境變數。每個 anacron 作業都有四個欄位。
時間 - 延遲 - 作業識別符號 - 命令
時間始終是天數,但可以指定為 @weekly、@monthly,以確保作業僅在此時執行。延遲是指作業到期執行後開始執行之前的等待分鐘數。如果您不想讓系統被多個作業淹沒,此功能會很有用!您可以使用它來防止系統首次啟動時出現大量作業。
注意 - 與它們包含的具體作業不同,/etc/crontab 和 /etc/anacrontab - 只能透過直接編輯來更新,不能透過 crontab -e 更新
有時您只想執行一次作業。Linux 提供 at 命令。要執行的指令將從使用 -f 選項指定的或從 stdin 讀取,如果 -f 未使用。要顯示作業執行的時間,您可以使用 -v 選項。以下是一個示例
|
$ at -f backup.sh -v 10:25 Wed Jul 7 10:25:00 2010
|
來自 at 的作業輸出
|
From tux@it.northpole.com Wed Jul 7 10:25:00 2010 Date: Wed, 7 Jul 2010 10:25:00 -0400 From: Tux <tux@it.northpole.com> Subject: Output from your job 5
|
the at command also has a -q option. When used, this option increases the nice value for the job. Be sure to look at the man pages for more details on these features.
管理作業
您可以使用 crontab command with the -l option to list your crontab, and use the atq command to display the jobs you have queued using the at command, as shown in below.
顯示計劃的作業
|
$ crontab -l 0,30 20-23 * 8 mon-fri /home/tux/backup.sh $ atq 13 Wed Jul 7 02:00:00 2010 a tux 14 Sat Jul 10 02:00:00 2010 a tux 15 Sun Jul 11 22:00:00 2010 a tux 16 Tue Jul 13 02:00:00 2010 a tux |
注意 - 有關實際由 at 執行的計劃命令的詳細資訊,您可以使用 -c 選項和作業號。您會注意到,在發出at命令時處於活動狀態的大多數環境都與計劃的作業一起儲存。
刪除作業
您可以使用 crontab command with the -r option as shown below
|
$ crontab -l 0,30 20-23 * 8 mon-fri /home/tux/backup.sh $ crontab -r $ crontab -l no crontab for tux |
您可以透過編輯 /etc/crontab、/etc/anacrontab 或編輯和/或刪除 /etc/cron.d 目錄中的檔案來刪除系統 cron 或 anacron 作業。
對於使用 at 命令計劃的作業,您可以使用 atrm 命令和作業號來刪除它們。多個作業必須用空格隔開。
|
$ atq 13 Wed Jul 7 02:00:00 2010 a tux 14 Sat Jul 10 02:00:00 2010 a tux 15 Sun Jul 11 22:00:00 2010 a tux 16 Tue Jul 13 02:00:00 2010 a tux $ atrm 16 14 15 $ atq 13 Wed Jul 7 02:00:00 2010 a tux |
管理非 root 使用者訪問許可權
在某些情況下,非 root 使用者可能需要訪問 crontab 和 cron 機制。在這種情況下,您只需建立檔案 /etc/cron.allow(如果它不存在),並且所有非 root 使用者都必須列在其中。相反,如果 /etc/cron.deny 存在,則其中列出的非 root 使用者無法使用 crontab 或 cron 機制。如果 /etc/cron.deny 檔案為空(這是預設設定),則允許所有使用者使用 cron 機制。
以下是使用過的檔案、術語和實用程式的部分列表。
- /etc/cron.{d,daily,hourly,monthly,weekly}
- /etc/at.deny
- /etc/at.allow
- /etc/crontab
- /etc/cron.allow
- /etc/cron.deny
- /var/spool/cron/*
- crontab
- at
- atq
- atrm