7-5 週期性行程
內容:
7-5-1 週期性服務
- crond
所謂『週期性行程』(稱之 cron),就是在設定特定的週期性時間,執行某一批次命令,並以行程稱之。所謂『週期性時間』,表示週期性並重複出現的時間,譬如每天下午 3 點整、每星期六的下午 5 點整、或每月的 15 日上午 10: 30 等等皆是。設定週期性行程對於自動化管理非常有幫助,我們可以請系統在週期性特定時間,去執行某些例行性的任務,或監視某一共享資源等等。首先須觀察 crond
服務程式是否啟動,如下:(執行
#systemctl status|stop|start crond 命令)
# systemctl status crond [執行命令]
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since
二 2017-02-07 08:48:43 CST; 7min ago
Main PID: 994 (crond)
CGroup: /system.slice/crond.service
└─994 /usr/sbin/crond -n |
7-5-2 cron 相關檔案
與 cron 相關的有下列檔案,並依照其功能分別說明之,如下:
-
/etc/cron.d/:使用者建立的 crontab 檔案儲存目錄。
-
/etc/cron.daily/:系統每日執行行程的儲存目錄。
-
/etc/cron.hourly/:系統每小時執行的儲存目錄。
-
/etc/monthly/:系統每月執行的儲存目錄。
-
/etc/weekly/:系統每周執行的儲存目錄
-
/etc/cron.allow、/etc/cron.deny:授權使用者操作 cron。
-
/etc/cronttab:crontab 示範格式。
-
/var/spool/cron/:cron 排序。
如同 at 命令一樣,cron 也是利用 allow 與 deny(/etc/cron.allow 與 /etc/cron.deny)兩檔案來規劃哪些使用者可以設定 cron。編輯 cron.allow 範例如下:(root 管理者)
# cat /etc/cron.allow
tsnien
nien |
上述範例表示,僅 tsnien 與 nien 使用者可以使用 cron 命令,其他未列入的使用者則沒有權限設定 cron。
7-5-3 週期執行表格 - crontab
cron 是利用建立一個 crontab 表格來規劃哪一個週期時間,應該執行何種命令,建立的方法可利用 vi 編輯,也可直接利用 crontab 命令操作。以系統所提供 /etc/crontab 為例,來說明其格式:(執行 # cat /etc/crontab 命令)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed |
前面四行為設定 cron 的執行環境,其中若每行的最前面是井號(#)的話,表示該行為註解說明。接下來,每一行表示一項定期執行的工作,它有 6 個欄位,每個欄位功能如下(未指定內容以 * 號表示):
每一行表示一個週期性行程,共有 6 個欄位,之間以空格區分。欄位內特殊符號有:
-
*(星號):代表任何時刻都接受。
-
,(逗號):表可接受多個時間,譬如分鐘是 15, 30, 45,則15 分、30分與 45 分都接受。
-
-(減號):表示時間區段,譬如日期是 2-10,則表示2 到 10 之間每天都接受。
-
/n(斜線):表示每隔 n,譬如分鐘是 */5,則表示每隔 5 分鐘。
7-5-4 建立週期命令 - crontab
建立與操作 cron 表格,係利用 crontab 命令來達成,格式如下:
$ crontab [ -u user ] file
$ crontab [ -u user ] { -l | -r | -e } |
常用選項如下:
-
-u user:指定某一使用者的 crontab 表格,一般都是由系統管理者設定。
-
file:直接導入 crontab 檔案。
-
-l :列出使用者在 crontab 所設定的定期命令。
-
-r :刪除 crontab 命令。
-
-e :直接進入 vi 編輯 /etc/crontab 檔案。
執行 $ crontab –e
之後,會立即進入 vi 編輯模式,並自動編輯使用者的 cron 表格,輸入內容後直接儲存並離開,且不要指定檔案名稱。操作範例如下:(以 tsnien 名稱登入並執行 $ crontab -e,進入 vi 模式下編輯)
# Test cron of tsnien
1 23 1,15 * * fsck /home
1,30 * * * * quota –a |
7-5-5 建立 crontab 範例
假設我們希望系統能週期性的執行下列工作:
(A) 建立crontab
執行 $ crontab –e 之後,會立即進入 vi 編輯模式,並自動編輯使用者的 cron 表格,輸入內容後直接儲存並離開,且不要指定檔案名稱。操作範例如下:(以 tsnien 名稱登入並執行 $ crontab -e,進入 vi 模式下編輯)
# Test cron of tsnien
1 23 1,15 * * fsck /home
1,30 * * * * quota –a |
第一行為每月 1 與 15 日的 23:01 時執行 fsck /home 命令;第二行為每小時的 1 與 30 分時執行 quota -a。值得注意的是,兩個都是系統管理命令,所以tsnien 必須是 root 群組的成員才可以操作。儲存並離開後,可觀察是否建立成功,操作範例如下($ crontab -l):
$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.4838 installed on Mon Oct 10 10:09:03 2005)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
# Test cron of tsnien
1 23 1,15 * * fsck /home
1,30 * * * * quota –l
|
(B) crontab 表格儲存
每一個使用者僅能建立一個 cron 表格,第一次建立時系統會將其儲存於 /var/spool/cron/ 目錄下,並以使用者名稱(如 tsnien)儲存。如果使用者欲修改其內容,則需再執行 crontab –e 命令,系統就會將原使用者的表格再叫出來編輯。接下來,觀察剛才 tsnien 所建立的表格:(需具 root 權限)
# cat /var/spool/cron/tsnien
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# Test cron of tsnien
1 23 1,15 * * fsck /home
1,30 * * * * quota -l |
7-5-6 檔案導入與刪除
(A) 檔案導入
我們也可以先利用 vi(或其他編輯工具)建立一個 cron 檔案,再將其導入成 cron 表格;假設期望建立的週期性工作如下:
則可利用 vi 編輯$ vi cron_1,檔案內容如下:
$ cat cron_1 [觀察 cron_1 檔案內容]
# file input cron table
# file name: cron_1
30 09 * * * who >who.day
30 17 * * 1 ps -ef >ps.week |
接下來,再將 cron_1 導入 cron 表格內,操作範例如下($crontab cron_1):
$ crontab cron_1 [載入 cron_1 檔]
$ crontab -l [觀察 crontab 內容]
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# file input cron table
# file name: cron_1
30 09 * * * who >who.day
30 17 * * 1 ps -ef >ps.week |
不過有一點必須特別注意,假使先前已經建立過 cron 表格,而且仍存在系統,此時再導入其他 cron 檔案時,就會將原來的 cron 表格覆蓋,並以新表格取代之。
(B) 刪除 crontab
使用者也可以刪除自己的 cron 表格(crontab -r),操作範例如下:
$ crontab -r [刪除]
$ crontab -l [觀察crontab內容]
no crontab for tsnien |
|