跳轉到內容

Ict-創新/LPI/107.2

來自華夏公益教科書,開放書籍,為開放的世界

107.2 自動化系統管理任務

[編輯 | 編輯原始碼]

考生應能夠使用 cron 或 anacron 定期執行作業,並使用 at 在特定時間執行作業。

關鍵知識領域

  • 管理 cron 和 at 作業。
  • 配置使用者對 cron 和 at 服務的訪問許可權。

1. 定時任務

[編輯 | 編輯原始碼]

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)

To: tux@it.northpole.com

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>


BackUp 成功!

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


job 5 at 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

To: tux@it.northpole.com


BackUp 成功!

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


上一章 | 下一章

華夏公益教科書