????????crond是Linux系統(tǒng)中用來(lái)定期執(zhí)行命令或指定程序任務(wù)的一種服務(wù)或軟件,與Windows下的計(jì)劃任務(wù)類(lèi)似。當(dāng)安裝完成操作系統(tǒng)后,默認(rèn)會(huì)安裝此服務(wù)工具,并且會(huì)自動(dòng)啟動(dòng)crond進(jìn)程。crond進(jìn)程每分鐘會(huì)定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動(dòng)執(zhí)行該任務(wù)。
????????Linux下的任務(wù)調(diào)度分為兩類(lèi),系統(tǒng)任務(wù)調(diào)度和用戶(hù)任務(wù)調(diào)度。系統(tǒng)任務(wù)調(diào)度是系統(tǒng)周期性所要執(zhí)行的工作,比如寫(xiě)緩存數(shù)據(jù)到硬盤(pán)、日志清理等。在/etc目錄下有一個(gè)crontab文件,這個(gè)就是系統(tǒng)任務(wù)調(diào)度的配置文件。
????????Linux下的crontab是一個(gè)用于設(shè)置周期性被執(zhí)行的任務(wù)的工具。用戶(hù)可以使用crontab命令來(lái)編輯、查看或刪除定時(shí)任務(wù)。在Linux系統(tǒng)中,crontab命令常見(jiàn)于Unix和Linux的操作系統(tǒng)之中,用于設(shè)置周期性被執(zhí)行的指令。
????????crontab儲(chǔ)存的指令被守護(hù)進(jìn)程激活,通常被稱(chēng)為cron jobs。crond在后臺(tái)運(yùn)行,每一分鐘檢查是否有預(yù)定的作業(yè)需要執(zhí)行。如果使用控制文件被修改了,cron守護(hù)進(jìn)程(crond)不必被重啟,而是直接讀取文件。
一、crond服務(wù)管理命令
service crond start // 啟動(dòng)服務(wù)
service crond stop // 關(guān)閉服務(wù)
service crond restart // 重啟服務(wù)
service crond reload // 重新載入配置
service crond status // 查看服務(wù)狀態(tài)
????????安裝完成操作系統(tǒng)后,默認(rèn)會(huì)安裝 crond 服務(wù)工具,且 crond 服務(wù)默認(rèn)就是自啟動(dòng)的。crond 進(jìn)程每分鐘會(huì)定期檢查是否有要執(zhí)行的任務(wù),如果有,則會(huì)自動(dòng)執(zhí)行該任務(wù)。
執(zhí)行命令如下:
(base)[root@uat ~]#service crond start
Redirecting to /bin/systemctl start crond.service
(base)[root@uat ~]#service crond stop
Redirecting to /bin/systemctl stop crond.service
(base)[root@uat ~]#service crond restart
Redirecting to /bin/systemctl restart crond.service
(base)[root@uat ~]#service crond reload
Redirecting to /bin/systemctl reload crond.service
(base)[root@uat ~]#service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2023-12-24 16:16:49 CST; 12s ago
Process: 8293 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 7518 (crond)
Tasks: 1
Memory: 640.0K
CGroup: /system.slice/crond.service
└─7518 /usr/sbin/crond -n
12月 24 16:16:49 uat.drd.gzhxrcb systemd[1]: Started Command Scheduler.
12月 24 16:16:49 uat.drd.gzhxrcb crond[7518]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 86% if used.)
12月 24 16:16:49 uat.drd.gzhxrcb crond[7518]: (CRON) INFO (running with inotify support)
12月 24 16:16:49 uat.drd.gzhxrcb crond[7518]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
12月 24 16:16:55 uat.drd.gzhxrcb systemd[1]: Reloading Command Scheduler.
12月 24 16:16:55 uat.drd.gzhxrcb systemd[1]: Reloaded Command Scheduler.
12月 24 16:17:01 uat.drd.gzhxrcb crond[7518]: (CRON) INFO (running with inotify support)
二、crontab 命令
????????crontab 命令是通過(guò) /etc/cron.allow 和 /etc/cron.deny 文件來(lái)限制某些用戶(hù)是否可以使用 crontab 命令的。
? ? ? ? 命令使用原則:
· 如果兩個(gè)文件都不存在,則只有root用戶(hù)才能使用crontab命令。
· 如果cron.allow存在, cron.deny不存在,則只有列在cron.allow文件里的用戶(hù)才能使用crontab命令,如果root用戶(hù)也不在里面,則root用戶(hù)也不能使用crontab。
· 如果cron.deny存在, cron.allow不存在,則只有列在cron.deny文件里面的用戶(hù)不能使用crontab命令,其它用戶(hù)都能使用。
· /etc/cron.allow優(yōu)先級(jí)高于/etc/cron.deny
· 都存在情況下,只有寫(xiě)入/etc/cron.allow文件的用戶(hù)可以使用 crontab 命令,沒(méi)有寫(xiě)入的用戶(hù)不能使用 crontab 命令。若用戶(hù)同時(shí)有/etc/cron.allow和/etc/cron.deny中,則/etc/cron.deny被忽略。
? ? ? ? Linux系統(tǒng)默認(rèn)只有/etc/cron.deny文件,如下圖所示:
2.1?crontab 命令格式
[root@localhost ~]# crontab [選項(xiàng)] [file]
說(shuō)明:
- file:?命令文件的名字,表示將file?作為 crontab的任務(wù)列表文件并載入 crontab;若在命令中未指定文件名,則上命令將受標(biāo)準(zhǔn)輸入(鍵盤(pán))上鍵入的命令,并將它們鍵入 crontab。
- 選項(xiàng)
- -u:user?用來(lái)設(shè)定某個(gè)用戶(hù)的crontab服務(wù)。(用戶(hù)的 crontab 服務(wù),此選項(xiàng)一般有 root 用戶(hù)來(lái)運(yùn)行)
- -e:編輯某個(gè)用戶(hù)的 crontab 文件內(nèi)容。如果不指定用戶(hù),則表示編輯當(dāng)前用戶(hù)的 crontab 文件。
- -l:顯示某用戶(hù)的 crontab 文件內(nèi)容,如果不指定用戶(hù),則表示顯示當(dāng)前用戶(hù)的 crontab 文件內(nèi)容。
- -r:從 /var/spool/cron 刪除某用戶(hù)的 crontab 文件,如果不指定用戶(hù),則默認(rèn)刪除當(dāng)前用戶(hù)的 crontab 文件。
- -i:在刪除用戶(hù)的 crontab 文件時(shí),給確認(rèn)提示。
示例:
????????查看內(nèi)在使用情況:
? ? ? ? 有一天我發(fā)現(xiàn)框中的區(qū)域即緩存的內(nèi)存非常的高,可用內(nèi)在非常的低,有一些應(yīng)用啟動(dòng)不起來(lái),于是寫(xiě)了一個(gè)清緩存的腳本,如下:
[root@drd app]# vi cleanBuffCache.sh
#!/bin/bash
echo "開(kāi)始清理緩存"
# 寫(xiě)入硬盤(pán),防止數(shù)據(jù)丟失
sync;sync;sync;
# 延遲10S
sleep 10
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "清理緩存結(jié)束"
? ? ? ? 然后配置crontab如下:
[root@drd app]# crontab -e
0 0 * * * /home/***文件絕對(duì)路徑***/cleanBufferCache.sh
????????當(dāng)“crontab -e”編輯完成之后,一旦保存退出,那么這個(gè)定時(shí)任務(wù)實(shí)際就會(huì)寫(xiě)入 /var/spool/cron/ 目錄中,每個(gè)用戶(hù)的定時(shí)任務(wù)用自己的用戶(hù)名進(jìn)行區(qū)分。而且 crontab 命令只要保存就會(huì)生效,只要 crond 服務(wù)是啟動(dòng)的。
????????然后使用 service crond reload 命令重新載入配置,使剛剛配的任務(wù)生效。(或者用service crond restart?或?service crond stop?再service crond start?均可)
2.2 任務(wù)配置說(shuō)明
語(yǔ)法:
minute hour day month week command
? ? ? ? 如上配置0 0 * * * /home/***文件絕對(duì)路徑***/cleanBufferCache.sh
- 第一個(gè)0(minute):表示一小時(shí)當(dāng)中的第0分鐘,可用 * 表示任務(wù)分鐘。取值范圍 0 ~ 59
- 第二個(gè)0(hour):表示一天當(dāng)時(shí)第0小時(shí),可用* 表示任務(wù)小時(shí)。取值范圍 0 ~ 23
- 第三個(gè) *(day):表示一個(gè)月當(dāng)中的第幾天。取值范圍 1 ~ 31
- 第四個(gè)* (month):表示一年當(dāng)中的第幾個(gè)月。取值范圍 1 ~ 12
- 第五個(gè)* (week):表示一周當(dāng)中的星期幾。0 ~ 7 (0?和 7?是星期日)
- 第六個(gè)參數(shù)(command):要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫(xiě)的腳本文件。(本示例為可執(zhí)行的腳本文件)
特殊符號(hào)說(shuō)明:
- * (星號(hào)):表示任務(wù)時(shí)間。如第一個(gè)(左邊第一個(gè))代表一小時(shí)中每分鐘都執(zhí)行一次的意思。
- ,(逗號(hào)):表示不連續(xù)的時(shí)間。如 0,15,25 * * * *?表示每小時(shí)0分鐘、15分鐘?和 25分鐘都執(zhí)行一次命令。
- -(中杠):表示連續(xù)的時(shí)間范圍。如 0 8-12 * * *?表示8點(diǎn)到12點(diǎn)0分都執(zhí)行一次命令。
- /(正斜線(xiàn)):表示每隔多久執(zhí)行一次。比如 */25 * * * * ,表示每隔25分鐘執(zhí)行一次命令。
示例:
配置規(guī)則 | 說(shuō)明 |
45 22 * * * | 在 22 點(diǎn) 45 分執(zhí)行命令 |
0 17 * * 1 | 在每周一的 17 點(diǎn) 0 分執(zhí)行命令 |
0 5 1,15 * * | 在每月 1 日和 15 日的凌晨 5 點(diǎn) 0 分執(zhí)行命令 |
40 4 * * 1-5 | 在每周一到周五的凌晨 4 點(diǎn) 40 分執(zhí)行命令 |
*/10 4 * * * | 在每天的凌晨 4 點(diǎn),每隔 10 分鐘執(zhí)行一次命令 |
0 0 1,15 * |
在每月 1 日和 15 日,每周一個(gè) 0 點(diǎn) 0 分都會(huì)執(zhí)行命令,注意:星期幾和幾日最好不要同時(shí)出現(xiàn),因?yàn)樗鼈兌x的都是天,非常容易讓管理員混淆 |
0 6 * * * |
每天早上6點(diǎn)執(zhí)行 |
0 */2 * * * |
每?jī)蓚€(gè)小時(shí) |
0 11 4 * 1-3 |
每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn) |
0 4 1 1 * |
1月1日早上4點(diǎn) |
推薦Crontab命令?執(zhí)行時(shí)間工具網(wǎng)站:crontab執(zhí)行時(shí)間計(jì)算 - 在線(xiàn)工具,可以此網(wǎng)站來(lái)測(cè)試和驗(yàn)證CRON表達(dá)式的執(zhí)行計(jì)劃。? ?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-761159.html
2.3?配置規(guī)則注意事項(xiàng)
- 6 個(gè)選項(xiàng)都不能為空,必須填寫(xiě)。如果不確定,則使用“*”代表任意時(shí)間。
- crontab 定時(shí)任務(wù)的最小有效時(shí)間是分鐘,最大有效時(shí)間是月。像 2018 年某時(shí)執(zhí)行、3 點(diǎn) 30 分 30 秒這樣的時(shí)間都不能被識(shí)別。
- 在定義時(shí)間時(shí),日期和星期最好不要在一條定時(shí)任務(wù)中出現(xiàn),因?yàn)樗鼈兌家蕴鞛閱挝?,非常容易讓管理變得混淆?/li>
- 在定時(shí)任務(wù)中,不管是直接寫(xiě)命令,還是在腳本中寫(xiě)命令,最好都使用絕對(duì)路徑。有時(shí)使用相對(duì)路徑的命令會(huì)報(bào)錯(cuò)。
易踩坑:2.2?第六個(gè)參數(shù) command是一個(gè)可執(zhí)行命令和可執(zhí)行的文件,若此參數(shù)是文件一定要把這個(gè)文件的權(quán)限修改為可執(zhí)行的文件,否則不生效。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-761159.html
到了這里,關(guān)于Linux crontab命令定時(shí)任務(wù)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!