假設今天在架設一台伺服器運作使用時,但很怕資料庫或程式被誤刪等狀況,這時候就需要做好系統備份,排程就可以在特定時間內做備份的動作,但這類的動作基本上會在夜間時段作執行。
參數
-u 編輯(user)其他使用者的排程內容。只有 root 權限才可以使用。-l 列出(list)排程。-e 編輯(edit)排程。-r 刪除(remove)排程。每一個使用者用戶,都有自己的排程管理,所以要查看自己定義的排程,就可以透過以下指令。
[root@localhost ~]# crontab -l
[root@localhost ~]# crontab -u [使用者帳戶] -l
進入排程內容,編輯跟 vi 的方式差不多。
[root@localhost ~]# crontab -e
編輯特定使用者排程內容,跟檢視特定使用者排程一樣。
[root@localhost ~]# crontab -u [使用者帳戶] -e
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -u [使用者帳戶] -r
排程服務會讀取排程的設定檔 /etc/crontab,檔案內容分為「環境設定」與「排程工作」。
[root@localhost ~]# cat /etc/crontab
# 環境設定
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 排程工作
# 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
依照CentOS7 的環境設定,預設都會以 bash 的 shell。
MAILTO 則是會將執行排程工作的輸出訊息以郵件方式寄給使用者。
| 欄位編號 | 說明 | 可設定值 |
|---|---|---|
| 1 | 分鐘 | 0分 到 59分 |
| 2 | 小時 | 凌晨 0時 到 23時 |
| 3 | 日期 | 每月1日 到 31日 |
| 4 | 月份 | 1月 到 12月,可用英文簡稱,例如:Jan、Feb... |
| 5 | 星期 | 0 到 7,0,7 都代表星期日,可用英文簡稱,例如:Mon |
| 6 | 使用者帳號 | 依照哪個使用設定的排程去執行該排程 |
| 7 | 排程工作指令 | 自行定義排程指令 |
| 特殊符號 | 說明 |
|---|---|
* |
任意時間 |
, |
分隔不同時間點 |
- |
時間區間 |
/n |
每隔n單位執行 |
| 設定值 | 排程時程 | 備註 |
|---|---|---|
| @reboot | 每次重新開機就執行 | |
| @yearly | 每年1日執行 | 0 0 1 1 * |
| @annually | 同上 | 0 0 1 1 * |
| @monthly | 每月一號零時零分執行 | 0 0 1 * * |
| @weekly | 每週星期天零時零分執行 | 0 0 * * 0 |
| @daily | 每天零時零分執行 | 0 0 * * * |
| @midnight | 同上 | 0 0 * * * |
| @hourly | 每小時零分執行 | 0 * * * * |
| 設定值 | 排程時程 | 備註 |
|---|---|---|
| 01 * * * * | 每小時的第1分鐘執行 | |
| 00 04 * * * | 每天凌晨04點00執行 | |
| 00 01 * * 1 | 每個禮拜星期一的凌晨01點00執行 | |
| 00 01 * * Mon | 同上 | |
| 30 08 15 * * | 每個月的15日08點30分執行 | |
| 01 * 4 May * | 每年五月4日每小時的第一分鐘執行 | |
| */10 * * * * | 每10分鐘執行一次 | |
| 00 10-15 * * * | 每天從早上10點到下午15點,整點執行一次 | |
| 00,30 * * * * | 每小時的00分及30分各執行一次 |
每天凌晨1點、下午13點執行一次備份
0 1,13 * * * /home/web/crontab/backup.sh
每30分鐘執行一次。
*/30 * * * * /home/web/crontab/calculation.sh
使用特殊排程時間,每天0時0分進行備份
@daily /home/web/crontab/backup.sh