計划任務,就是規划好的會在預計的時間去執行的任務。在linux系統中使用crond服務來完成這項工作,我們可以把cron設置為開機時自動啟動。cron啟動后,它會讀取它的所有配置文件(全局性配置文件/etc/crontab,以及每個用戶的計划任務配置文件),然后cron會根據命令和執行時間來按時來調用度工作任務。
0、crond計划任務相關的命令、配置
名稱 | 類型 | 說明 |
---|---|---|
crontab | 命令 | crontab命令,可以創建、編輯、刪除某個用戶的定時任務 |
/etc/crontab | 文件 | 系統計划任務的全局配置文件 |
/var/spool/cron/ | 目錄 | 存放以用戶名命名的用戶計划任務配置文件,通過crontab命令編輯 |
/etc/cron.deny | 文件 | 設置哪些用戶不能使用crontab功能 |
/etc/cron.hourly/ | 目錄 | 存放每個小時執行一次的腳本 |
/etc/cron.daily/ | 目錄 | 存放每天執行一次的腳本 |
/etc/cron.monthly/ | 目錄 | 存放每月執行一次的腳本 |
/etc/cron.weekly/ | 目錄 | 存放每周執行一次的腳本 |
/etc/cron.d/ | 目錄 | 系統自動定期需要執行的任務文件 |
注意:
1、通過crontab命令添加某個用戶的計划任務后,會在/var/spool/cron目錄下生成以該用戶名為名稱的文件,crontab命令編輯的就是該文件。
2、crond服務每分鍾不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用 crond服務做一些事情。用crontab命令配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。
1、查看系統是否安裝了crondtab
rpm -qa|grep crontab
2、查看是否啟動了crond服務
ps -ef|grep crond
或service crond status
3、如何啟停crond服務
- 啟動
/etc/init.d/crond start
或service crond start
- 停止
/etc/init.d/crond stop
或service crond stop
- 重啟
/etc/init.d/crond restart
- 重新載入配置文件(一般設置計划任務后執行,可以立即生效,不用等系統去讀配置文件)
/etc/init.d/crond reload
4、設置crond服務開機自啟動
chkconfig crond on
5、crontab命令使用說明
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab) 編輯用戶計划任務
-l (list user's crontab) 列出用戶的計划任務的詳細內容
-r (delete user's crontab) 刪除用戶的計划任務(指刪除該用戶的所有計划任務,強烈建議使用-ir)
-i (prompt before deleting user's crontab) 刪除用戶的計划任務前進行提示
-s (selinux context)
示例1:編輯當前登錄用戶的計划任務
crontab -e
示例2:列出test用戶的計划任務
crontab -l test -e
6、計划任務文件的格式
* * * * * command
分 時 天 月 周 要執行的命令
符號 | 說明 |
---|---|
分 | 表示分鍾,可以是0~59之間的任意整數 |
時 | 表示小時,取值范圍[0~23] |
天 | 取值范圍[1~31] |
月 | 取值范圍[1~12] |
周 | 取值范圍[0~7],0或7代表星期日 |
command | 要執行的命令,可以是系統命令,也可以是自己編寫的腳本 |
* | 表示每的意思,例如分的位置為*,表示每分鍾都要執行,表示0~59所有值 |
, | 分隔符,當對應域取多個值時使用,例如分鍾域的“1,3”表示每小時的1分和3分鍾執行計划任務 |
- | 表示時間范圍,例如2-6表示"2,3,4,5,6" |
/ | 可以用來指定時間的間隔,例如“*/5”用在分鍾域時表示每5分鍾執行依次 |
示例1:每天0點0分時,執行test腳本
0 0 * * * test.sh
示例2:每3小時執行一下test腳本
* */3 * * * test.sh
示例3:周一到周五的0點0分執行test腳本
0 0 * * 1-5 test.sh