Linux 命令(104)—— crontab 命令
- 2019 年 11 月 27 日
- 筆記
1.命令簡介
contab(cron table) 命令被用管理用戶的需要周期性執行的任務,與 Windows 下的計劃任務類似,當安裝完作業系統後,默認會安裝此服務工具,並且會自動啟動 crond 進程,crond 進程每分鐘會檢查是否有要執行的任務,如果有則執行該任務。
Linux 下的任務調度分為兩類,系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫快取數據到硬碟、日誌清理等。/etc/crontab 文件是系統任務調度的配置文件。
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來訂製自己的計劃任務。所有用戶定義的 crontab 文件都被保存在 /var/spool/cron 目錄中,其文件名與用戶名一致。
系統管理員可以通過/etc/cron.deny 和 /etc/cron.allow 這兩個文件來禁止或允許用戶擁有自己的 crontab 文件。
2.命令格式
crontab [-u USER] FILE crontab [-u USER] [-l | -r | -e] [-i] [-s] crontab -n [ HOSTNAME ] crontab -c
3.選項說明
-u 指定要設置定時任務的用戶名 -l 列出當前的定時任務 -r 刪除定時任務 -e 編輯用戶的定時任務。任務保存在 /var/spool/cron 目錄下與用戶名同名的文件中 -i 在刪除定時任務前詢問用戶是否確定刪除 -s 在進行編輯/替換之前,將當前的 SELinux 安全上下文字元串作為 MLS_LEVEL 附加到 crontab 文件 -n [HOSTNAME] 此選項只有當 cron(8) 使用 -c 選項啟動以支援集群環境時才使用,用於指定集群中哪個主機執行定時 crontab 文件中的定時任務。如果省略了主機名,則使用 gethostname(2) 返回的本地主機名 -c 此選項只有當 cron(8) 使用 -c 選項啟動以支援集群環境時才使用,用於查詢集群中當前哪個主機執行定時 crontab 文件中的定時任務
4.用戶配置文件
crontab 文件保存了用戶的定時任務,以特定格式保存在 /var/spool/cron 目錄下與用戶名同名的文件中。例如如果是 root 用戶,那麼添加任務時,會在該路徑下有一個 root 文件。Linux 的 cron 服務會每隔一分鐘去讀取一次 /var/spool/cron 目錄下面所有的內容。
crontab 文件每一行代表一項任務,每項任務分為六個欄位,前五個欄位是時間欄位,第六個欄位是要執行的命令,格式如下:
minute hour day month week command
minute 分鐘,取值範圍 0 到 59; hour 小時,取值範圍 0 到 23; day 日期,取值範圍 1 到 31; month 月份,取值範圍 1 到 12,或 jan,feb,mar,apr…; week 星期,取值範圍 0 到 7,或 sun,mon,tue,wed,thu,fri,sat。注意 0 和 7 均代表星期日; command 要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件;
在以上各個時間欄位中,還可以使用以下特殊字元:
* 表示所有可能的值,例如 minute 是 *,表示每分鐘都執行命令 , 可以用逗號隔開的值指定一個列表,例如,1,2,5,7,8,9 - 可以用整數之間的橫杠表示一個範圍,例如 2-6 表示 2,3,4,5,6 / 可以用斜杠指定時間的間隔頻率,例如 minute 為 */2 表示每兩分鐘執行一次命令
注意,crontab 文件注釋符號為 #。
5.系統配置文件
除了用戶的 crontab 文件,與定時任務相關的系統配置文件有:
/etc/crontab 系統定時任務配置文件 /etc/cron.d 自動定期需要做的任務 /etc/cron.hourly 每小時執行一次的任務 /etc/cron.daily 每天執行一次的任務 /etc/cron.weekly 每周執行一次的任務 /etc/cron.monthly 每月執行一次的任務 /etc/cron.allow 該文件中所列用戶允許執行定時任務 /etc/cron.deny 該文件中所列用戶不允許執行定時任務 /var/log/cron crontab 的日誌文件
Linux 的 cron 服務會每隔一分鐘去讀取一次 /etc/crontab 文件和 /etc/cron.d 目錄下面所有的內容。/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 下的任務也會間接按照相應的周期被調用。
6.
7.常用示例
(1)添加定時任務。
crontab -e * * * * * command # 每分鐘執行一次 command 3,15 * * * * command # 每小時的第 3 和第 15 分鐘執行 3,15 8-11 * * * command # 上午 8 點到 11點每小時第 3 和第 15 分鐘執行 3,15 8-11 * * 1 command # 每個星期一的上午 8 點到 11 點的第 3 和第 15 分鐘執行 3,15 8-11 1 * * command # 每個月一號上午 8 點到 11 點的第 3 和第 15 分鐘執行 3,15 8-11 1 1 * command # 每年一月一號上午 8 點到 11 點的第 3 和第 15 分鐘執行 0 */2 * * * /sbin/service httpd restart # 每隔兩個小時在第 0 分時候重啟一次 httpd
(2)查看定時任務。
crontab -l
(3)刪除定時任務,即清除 /var/spool/cron 目錄下 crontab 文件。危險動作,請注意備份。
crontab -r
(4)將指定的 crontab 文件還原到 /var/spool/cron 目錄下。
crontab FILE
