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