【Linux】定時任務crontab
阿新 • • 發佈:2018-11-14
在Linux或類Unix系統中,通常使用 crontab
命令在指定的時間執行一個shell指令碼或者一系列Linux命令,也就是通常所說的定時任務。
一、cron 程序
在詳細介紹crontab之前,必須要說一下 cron 程序
。
1、cron程序是linux中的守護程序,在系統後臺執行,它會(預設每分鐘)持續地檢查/etc/crontab
檔案、/etc/cron.*/
目錄、/var/spool/cron/
目錄,讀取排程任務並執行。
2、所有使用者建立的crontab檔案都儲存在/var/spool/cron/
目錄,被cron服務定時檢查。
二、crontab命令:
crontab
通過 crontab
命令,每個使用者都可以編輯或者配置自己的定時任務,並擁有自己的 crontab 檔案。
1、建立/編輯 crontab 檔案
在 linux 命令列中輸入crontab -e, 即可建立或編輯使用者自己的crontab檔案:
crontab -e
當crontab檔案不存在時,即為建立;已存在時即為編輯;
此時,可以輸入具體的crontab命令,用來增加、修改或刪除當前使用者的某一項任務。
在crontab檔案中,每一行命令代表一個定時任務!
2、crontab 語法(欄位介紹)
crontab -e之後,即可輸入crontab命令,具體語法如下:
1 2 3 4 5 /path/to/command arg1 arg2
或者:
1 2 3 4 5 /root/ntp_sync.sh
各欄位的格式:
{minute} | {hour} | {day-of-month} | {month} | {day-of-week} | {full-path-to-shell-script} |
---|---|---|---|---|---|
分鐘 (0-59) | 小時 (0-23) | 日期 (1-31) | 月份 (1-12) | 一週當中的某天 (0-7 [7 或 0 代表星期天]) | 計劃執行的指令碼或命令的完整路徑 |
3、crontab 命令示例
(結合第4部分的操作符使用方法一起學習)
# 每隔 5 分鐘執行一次 backupscript 指令碼 ##
*/5 * * * * /root/backupscript.sh
### 每天的凌晨 1 點執行 backupscript 指令碼 ##
0 1 * * * /root/backupscript.sh
### 每月的第一個凌晨 3:15 執行 backupscript 指令碼 ##
15 3 1 * * /root/backupscript.sh
### 每個工作日(Mon – Fri) 11:59 p.m 都進行備份作業。
59 23 * * 1,2,3,4,5 /root/bin/backup.sh
或者:
59 23 * * 1-5 /root/bin/backup.sh
### 每週六、週日的3點10分執行hello.sh
10 3 * * 0,6 hello.sh
### 晚上11點到早上8點之間每兩個小時,及每天早上八點,輸出資訊到檔案中
0 23-7/2,8 * * * echo "have a good dream:)" >> /tmp/test.txt
### 每個月的4號與每個禮拜的禮拜一到禮拜三的早上11點執行命令
0 11 4 * 1-3 command
可以把經常要做的一些事放到其中,簡化工作量,如每週一檢查伺服器的執行狀態,檢視報告,殺掉一些程序等等……
4、crontab 命令輔操作符
操作符允許為一個欄位指定多個值,這裡有三個操作符可供使用:
-
星號 (
*
) : 代表任何時刻- 舉個例子,在小時欄位中,一個星號等同於每個小時;在月份欄位中,一個星號則等同於每月。
-
逗號 (
,
) : 在一個欄位上指定多個值,例如:1,5,10,15,20,25 -
橫槓 (
-
) : 指定了一個值的範圍- 例如:5-15 ,等同於使用逗號操作符鍵入的 5,6,7,8,9,…,13,14,15。
-
分隔符 (
/
) : 代表‘每’,/n表示每隔n單位間隔- 例如:小時欄位為*/5 表示每5小時,也可以寫成0-23/5,意思一樣。其它欄位也是類似的。
5、crontab 檢視和刪除某使用者所有的定時任務
crontab -l # 預設檢視當前使用者的所有定時任務
# 使用-u 引數檢視指定使用者的定時任務,需要以root使用者身份執行
crontab -u username -l
crontab -r # 刪除當前使用者的crontab的所有任務內容,慎用!
### 刪除指定使用者名稱下的定時任務,需要以 root 使用者身份執行,慎用!
crontab -r -u username
6、禁用郵件輸出
預設情況下,某個命令或者指令碼的輸出內容(如果有的話)會發送到你的本地郵箱賬戶中。若想停止接收 crontab 傳送的郵件,需要新增 >/dev/null 2>&1 這段內容到執行的命令的後面,例如:
0 3 * * * /root/backup.sh >/dev/null 2>&1
7、使用特殊字串
linux中提供了以下 8 個特殊字串,可以用來替代crontab命令的前五個欄位,這樣不但可以節省時間,還可以提高可讀性。
特殊字元 | 含義 |
---|---|
@reboot | 在每次啟動時執行一次 |
@yearly | 每年執行一次, 等同於 “0 0 1 1 *” |
@annually | (同 @yearly) |
@monthly | 每月執行一次, 等同於 “0 0 1 * *” |
@weekly | 每週執行一次, 等同於 “0 0 * * 0” |
@daily | 每天執行一次, 等同於 “0 0 * * *” |
@midnight | (同 @daily) |
@hourly | 每小時執行一次, 等同於 “0 * * * *” |
示例:
## 每小時執行一次 ntpdate 命令
@hourly /path/to/ntpdate