
類型:Linux發(fā)行版
簡(jiǎn)介:與RHEL完全兼容,具有企業(yè)級(jí)穩(wěn)定性及開源等優(yōu)勢(shì)。
在Rocky Linux上,定時(shí)任務(wù)的管理由Cronie完成。Cronie是一個(gè)基于時(shí)間的自動(dòng)化任務(wù)調(diào)度工具,它可以自動(dòng)化地按預(yù)定時(shí)間執(zhí)行命令或腳本。本文將幫助大家了解如何使用Cronie定時(shí)任務(wù)(crontab)來(lái)自動(dòng)運(yùn)行腳本。
一、環(huán)境要求
1、一臺(tái)運(yùn)行 Rocky Linux 的計(jì)算機(jī)。
2、熟悉如何使用命令行編輯器(本文將使用 “vi”)。
3、基本的 bash、Python 或其他腳本/編程語(yǔ)言的知識(shí)。
4、你已通過(guò) SSH 登錄到系統(tǒng),且有權(quán)限(root 或 UID 大于 1000 的普通用戶)。
二、Cronie簡(jiǎn)介
Cronie 是 Linux 系統(tǒng)中用于定時(shí)任務(wù)調(diào)度的服務(wù)。它通過(guò)一個(gè)守護(hù)進(jìn)程(”crond”)來(lái)執(zhí)行任務(wù),并且支持周期性地運(yùn)行腳本。Cronie 的相關(guān)組件如下:
1、cronie:任務(wù)調(diào)度的主程序包,Rocky Linux 默認(rèn)包含。
2、crontab:每個(gè)用戶用來(lái)管理定時(shí)任務(wù)的命令。
3、crond.service:Cronie 的守護(hù)進(jìn)程,可以通過(guò) “systemctl” 命令進(jìn)行管理(啟動(dòng)、停止、重啟等)。
4、/etc/crontab:系統(tǒng)級(jí)別的 cron 配置文件,允許管理員分配任務(wù)給不同用戶。
5、/var/spool/cron/:保存每個(gè)用戶的定時(shí)任務(wù)文件。
6、/var/log/cron:Cronie 的日志文件。
三、Crontab命令
“crontab” 是安裝 Cronie 后獲得的命令,常用選項(xiàng)包括:
-e?#?編輯定時(shí)任務(wù) -l?#?查看定時(shí)任務(wù) -r?#?刪除當(dāng)前用戶所有?crontab?任務(wù)
四、使用Cronie
要使用 Cronie 定時(shí)任務(wù),可以編輯用戶的 crontab 文件。通常我們使用 “crontab -e” 命令編輯定時(shí)任務(wù)。
shell > cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 注意: 所有 # 開頭的行都是注釋說(shuō)明, 可隨意修改添加 # 默認(rèn) * 代表所有, 比如每一分鐘/每一小時(shí)/每一天均執(zhí)行命令 # 更多說(shuō)明詳見(jiàn) man 4 crontabs # 任務(wù)定義示例: # .---------------- 指定分鐘 (0-59) # | .-------------- 指定小時(shí) (0-23) # | | .------------ 每月第幾天 (1-31) # | | | .---------- 指定月份 (1-12) 或月份前三個(gè)字母縮寫 jan,feb,mar,apr ... # | | | | . ------- 每周第幾天(0-6) (周日=0 或 7) 或者 sun, mon, tue, wed, thu, fri, sat # | | | | | # * * * * * 要執(zhí)行的用戶名 要執(zhí)行的命令
在 crontab 文件中,每一行的格式如下:
示例:每天晚上 10 點(diǎn)執(zhí)行備份腳本
假設(shè)你希望每天晚上 10 點(diǎn)執(zhí)行一個(gè)備份腳本,首先運(yùn)行:
crontab -e
然后在編輯器中輸入以下內(nèi)容:
00 22 * * * /usr/local/sbin/backup
這行命令表示每天晚上 10 點(diǎn)(22:00)執(zhí)行 “/usr/local/sbin/backup” 腳本。編輯完成后,按下 “Esc” 鍵退出插入模式,然后輸入 “:wq” 保存并退出。
注意:要確保腳本具有可執(zhí)行權(quán)限,否則定時(shí)任務(wù)不會(huì)執(zhí)行??梢酝ㄟ^(guò) “chmod +x /usr/local/sbin/backup” 命令來(lái)賦予腳本執(zhí)行權(quán)限。
復(fù)雜選項(xiàng):
如果你需要設(shè)置更復(fù)雜的定時(shí)任務(wù),Cronie 提供了多種選項(xiàng):
1、每 10 分鐘執(zhí)行一次備份:
*/10 * * * * /usr/local/sbin/backup
2、每周一、三、五每 10 分鐘執(zhí)行備份:
*/10 * * * 1,3,5 /usr/local/sbin/backup
3、每天 10 分鐘一次(但不在周六和周日):
*/10 * * * 1-5 /usr/local/sbin/backup
五、Cronie表達(dá)式解析
1、*:代表所有時(shí)間單位。例如,第一個(gè) “*” 表示任意分鐘,第二個(gè) “*” 表示任意小時(shí)。
2、,:表示多個(gè)非連續(xù)的時(shí)間。例如,”0 8,12,16 * * *” 表示每天 8:00、12:00 和 16:00 執(zhí)行。
3、-:表示一個(gè)連續(xù)的時(shí)間范圍。例如,”0 5 * * 1-6″ 表示每周一至周六的 5 點(diǎn)執(zhí)行。
4、*/n:表示執(zhí)行頻率間隔。例如,”*/10 * * * *” 表示每 10 分鐘執(zhí)行一次。
輸出重定向:
定時(shí)任務(wù)運(yùn)行時(shí)可能會(huì)產(chǎn)生輸出,這些輸出有時(shí)會(huì)導(dǎo)致任務(wù)執(zhí)行失敗。為了避免這種情況,可以將輸出重定向到 “/dev/null”:
*/10 * * * * /usr/local/sbin/backup &> /dev/null
六、常見(jiàn)問(wèn)題解答
1、”/etc/crontab” 和 “crontab -e” 有什么區(qū)別?
- “crontab -e” 編輯的是當(dāng)前用戶的定時(shí)任務(wù),系統(tǒng)不需要顯式指定用戶;
- “/etc/crontab” 是系統(tǒng)級(jí)別的 cron 配置文件,需要明確指定執(zhí)行任務(wù)的用戶。
2、定時(shí)任務(wù)沒(méi)有執(zhí)行怎么辦?
- 檢查 “/var/log/cron*” 日志,查看任務(wù)是否被觸發(fā);
- 使用 “journalctl -u crond.service” 查看 “crond” 守護(hù)進(jìn)程的日志;
- 確保腳本有執(zhí)行權(quán)限(”chmod +x”);
- 確保任務(wù)沒(méi)有報(bào)錯(cuò)或產(chǎn)生輸出阻止執(zhí)行,必要時(shí)使用輸出重定向。
3、除了 Cronie,還有其他類似的 cron 變體嗎?
- “fcron”(最新版本為 3.3.0,2016年8月14日發(fā)布)
- “cronsun”(最新版本為 0.3.5,2018年11月20日發(fā)布)