管理主機的時候,我們每天有些事情是經常要做的,為了避免每次都手工操作,我們可以編寫計劃任務,來讓主機周期性地按照計劃來自動執行。
### 安裝啟動
CentOS下:
~~~
yum install vixie-cron
yum install crontabs
~~~
安裝前者一般會同樣安裝上后者。
啟動服務。
~~~
service crond start
~~~
要啟動該服務才行。
### 系統級crontab
用ls /etc/cron然后敲兩下TAB,可以看到相關文件及目錄。
~~~
cron.d/ cron.daily/ cron.hourly/ cron.monthly/ crontab cron.weekly/
~~~
### 文件及目錄解讀
我們可以編輯crontab文件,來創建計劃任務。
而以daily,hourly,weekly,monthly后綴的目錄下分別存放每天,每月,每周,每月執行的任務。
其中存放的就是**Shell腳本文件**,權限755。我們把要執行的任務寫成Shell腳本丟進行相應的目錄就可以了。
而不規則周期的計劃任務放在corn.d目錄下面。可以看做是crontab文件的補充。
### crontab文件格式
該文件開頭包含必要的環境變量,不再介紹。
具體寫法直接看源文件注釋:
`
.---------------- 分鐘 (0 - 59)
| .------------- 小時 (0 - 23)
| | .---------- 幾號 (1 - 31)
| | | .------- 月份 (1 - 12) 或者 jan,feb,mar,apr ...
| | | | .---- 星期 (0 - 6) (星期日=0 或 7) 或者 sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * 用戶名 要執行的命令
`
一共七個字段,其含義一目了然。需要注意的是每個字段的寫法。
* `*`表示每一個。比如minute字段下的`*`表示每一分鐘執行
* `*/n`表示每隔n。比如hour字段下,`*/2`表示每隔兩小時執行。0-10/2表示1,3,5,7,9
* `1-5`這種格式表示一共連續的時間段
* `1,3,5`這種格式是枚舉幾個不連續的時間段
> 注意:
1. 第三個字段‘天’和第五個字段‘星期幾’是或的關系。所以不會沖突,符合兩種情況都執行。
2. 該文件中如果出現%要進行轉義,比如date +%w 在該文件內編寫的時候要寫成date +\%w
3. 把分鐘設置成`*`要慎重!
### crontab命令(用戶級)
### 命令選項
~~~
crontab [-u user] file
crontab [-u user] [-e|-l|-r]
~~~
| 選項 | 描述 |
|-----|-----|
| e | 編輯計劃任務 |
| l | 列出計劃任務 |
| r | 刪除計劃任務 |
| i | 刪除之前確認 |
| u | 指明所屬用戶 |
| s | selinux context |
s選項不常用。
> 實際上該命令編輯的是**/var/spool/cron/用戶名**文件。
所以你也可以直接編輯該文件。
守護進程crond每分鐘會讀取該文件一次。
### 編寫格式
格式與前文中crontab文件的編寫格式相仿,但是沒有用戶user-name字段。
**因為該命令只能編寫當前用戶的計劃任務**。
### 日志
在`/var/log/cron`下面可以看到全部日志。
而`/var/spool/cron/`在下面也可以看到一定的日志。