Linux进阶之路————crond定时任务调度
引言
crond 的概念和 crontab 是不可分割的。crontab 是一個命令,而 crond 是Linux 下用來周期性執(zhí)行某種任務或等待處理某些事件的守護進程,類似于 Windows 下的計劃任務。
當裝完操作系統(tǒng)之后,默認便會安裝 crond 服務工具,并會自動啟動 crond 進程,crond 進程每分鐘定期檢查是否有要執(zhí)行的任務,如果有要執(zhí)行的任務,則自動執(zhí)行該任務。
Linux 下的定時任務種類
| 種類 | 使用場景 |
| at | 適合僅執(zhí)行一次就結束的調(diào)度命令,需要啟動一個后端的atd服務。? |
| crontab | 最常用的定時任務,需要啟動一個服務crond才行,crond服務通過crontab命令實現(xiàn)? |
| anacron | 無法周期性執(zhí)行,只能以天為周期,但有個特點,在關機狀態(tài)下未>執(zhí)行的任務,下次開機時可以補上執(zhí)行 |
crontab 工作原理
在 Linux 中,crontab 是最常用的定時任務工具,系統(tǒng)會每分鐘循環(huán)檢查任務列表,默認系統(tǒng)中可以登錄的用戶,都可以使用 crontab 定義計劃任務。另外,還可以通過 /etc/cron.allow 文件來限制權限。
系統(tǒng)任務調(diào)度和用戶任務調(diào)度
crontab 設置定時任務可以分為兩類:
系統(tǒng)任務調(diào)度:指的是系統(tǒng)級別的周期性任務,如定期寫磁盤、日志清理。/etc/crontab 文件就是系統(tǒng)任務調(diào)度的配置文件。
用戶任務調(diào)度:通過 crontab -e 進行編寫的任務,都屬于用戶任務調(diào)度,這類任務可以包括:用戶數(shù)據(jù)備份、定時郵件提醒等。Linux 系統(tǒng)會將所有用戶設置的定時任務存放到 /var/spool/cron 目錄中,文件名與用戶名一致:
執(zhí)行 crontab -r? 后,即直接刪除用戶 crontab 文件:
cron 表達式
【基本含義】
| 第一個* | 一小時當中的第幾分鐘 | 0-59 |
| 第二個* | 一天當中的第幾小時 | 0-23 |
| 第三個* | 一個月當中的第幾天 | 1-31 |
| 第四個* | 一年當中的第幾月 | 1-12 |
| 第五個* | 一周當中的星期幾 | 0-7(0和7 都代表星期日) |
【特殊符號含義】
| 特殊符號 | 含義 |
| * | 任何時間。如第一個 * 代表每分鐘都執(zhí)行。 |
| , | 不連續(xù)的時間,如:0 8,12 * * * ,表示每天8:00和12:00各執(zhí)行一次。 |
| - | 連續(xù)的時間段,如:0 5 * * 1-6,表示每周一到周六的5:00執(zhí)行。 |
| / | 間隔時間,如:*/10 * * * * , 表示每隔 10 分鐘執(zhí)行一次,不看時間點。 |
crontab 基本應用
【語法】
crontab [-u user] [ -e | -l | -r ]
【常用參數(shù)】
-e 編輯 crontab 定時任務
-l? 查詢crontab 定時任務
-r? 刪除當前用戶所有的 crontab 任務(終止任務調(diào)度)
【服務操作】
service crond restart 或 /sbin/service crond restart? 重啟任務調(diào)度服務?
service crond stop 關閉服務
service crond start 啟動服務
service crond reload 重新載入配置
查看crontab 運行日志
在 /var/log/cron-日期? 文件中,可以看到定時任務的執(zhí)行情況:
應用案例1
【案例要求】將 /etc 目錄下的文件列表每分鐘追加到 /tmp/to.txt 文件中。
【操作步驟】
1)?cron? -e
2)?*/1 * * * * ?ls -l /etc >>/tmp/to.txt
3)保存退出,即可生效
?
應用案例2
【案例要求】每天凌晨2點,將mysql數(shù)據(jù)庫testdb,備份到文件mydb.bak中
1)先編寫一個腳本文件,/home/mytask3.sh
/usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/mydb.bak
2)給mytask3.sh 一個可執(zhí)行權限
chmod 744 /home/mytask3.sh
3)crontab -e
4)0 2 * * * /home/mytask3.sh
【注意】如果直接執(zhí)行類似 * * * * * ls? /home? 或 * * * * * echo 'hello? world' 這樣的任務,Linux會每分鐘發(fā)一封郵件給當前用戶。保存在 /var/spool/mail/root 中。
總結
以上是生活随笔為你收集整理的Linux进阶之路————crond定时任务调度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中HashMap的常用操作
- 下一篇: Linux问题处理————命令提示符显示