【運維】Linux定時任務(wù) 定時執(zhí)行腳本
在安裝完成操作系統(tǒng)后,默認(rèn)會安裝 crond 服務(wù)工具,且 crond 服務(wù)默認(rèn)就是自啟動的。crond 進(jìn)程每分鐘會定期檢查是否有要執(zhí)行的任務(wù),如果有,則會自動執(zhí)行該任務(wù)。
五分鐘執(zhí)行一次sh腳本
進(jìn)入編輯頁面
crontab -e
按Insert? ?進(jìn)行編輯
?# 每兩分鐘執(zhí)行一次
*/2 * * * * /usr/local/start.sh
依次按 :wq 進(jìn)行保存? 即時生效
重啟
service crond restart
#設(shè)定crond服務(wù)為開機(jī)自啟動
chkconfig crond on
接下來,在介紹 crontab 命令。該命令和 at 命令類似,也是通過 /etc/cron.allow 和 /etc/cron.deny 文件來限制某些用戶是否可以使用 crontab 命令的。而且原則也非常相似:
- 當(dāng)系統(tǒng)中有 /etc/cron.allow 文件時,只有寫入此文件的用戶可以使用 crontab 命令,沒有寫入的用戶不能使用 crontab 命令。同樣,如果有此文件,/etc/cron.deny 文件會被忽略,因為 /etc/cron.allow 文件的優(yōu)先級更高。
- 當(dāng)系統(tǒng)中只有 /etc/cron.deny 文件時,寫入此文件的用戶不能使用 crontab 命令,沒有寫入文件的用戶可以使用 crontab 命令。
- 這個規(guī)則基本和 at 命令的規(guī)則一致,同樣是 /etc/cron.allow 文件比 /etc/cron.deny 文件的優(yōu)先級高,Linux 系統(tǒng)中默認(rèn)只有 /etc/cron.deny 文件。
每個用戶都可以實現(xiàn)自己的 crontab 定時任務(wù),只需使用這個用戶身份執(zhí)行“crontab -e”命令即可。當(dāng)然,這個用戶不能寫入 /etc/cron.deny 文件。
crontab 命令的基本格式如下:
[root@localhost ~]# crontab [選項] [file]
注意,這里的 file 指的是命令文件的名字,表示將 file 作為 crontab 的任務(wù)列表文件并載入 crontab,若在命令行中未指定文件名,則此命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將它們鍵入 crontab。
與此同時,表 1 羅列出了此命令常用的選項及功能。
?
選項 | 功能 |
---|---|
-u user | 用來設(shè)定某個用戶的 crontab 服務(wù),例如 "-u demo" 表示設(shè)備 demo 用戶的 crontab 服務(wù),此選項一般有 root 用戶來運行。 |
-e | 編輯某個用戶的 crontab 文件內(nèi)容。如果不指定用戶,則表示編輯當(dāng)前用戶的 crontab 文件。 |
-l | 顯示某用戶的 crontab 文件內(nèi)容,如果不指定用戶,則表示顯示當(dāng)前用戶的 crontab 文件內(nèi)容。 |
-r? | 從 /var/spool/cron 刪除某用戶的 crontab 文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的 crontab 文件。? |
-i | 在刪除用戶的 crontab 文件時,給確認(rèn)提示。 |
其實 crontab 定時任務(wù)非常簡單,只需執(zhí)行“crontab -e”命令,然后輸入想要定時執(zhí)行的任務(wù)即可。不過,當(dāng)我們執(zhí)行“crontab -e”命令時,打開的是一個空文件,而且操作方法和 Vim 是一致的。那么,這個文件的格式才是我們真正需要學(xué)習(xí)的內(nèi)容。文件格式如下:
[root@localhost !]# crontab -e
#進(jìn)入 crontab 編輯界面。會打開Vim編輯你的任務(wù)
* * * * * 執(zhí)行的任務(wù)
這個文件中是通過 5 個“*”來確定命令或任務(wù)的執(zhí)行時間的,這 5 個“*”的具體含義如表 2 所示。
項目 | 含義 | 范圍 |
---|---|---|
第一個"*" | 一小時當(dāng)中的第幾分鐘(minute) | 0~59 |
第二個"*" | 一天當(dāng)中的第幾小時(hour) | 0~23 |
第三個"*" | 一個月當(dāng)中的第幾天(day) | 1~31 |
第四個"*" | 一年當(dāng)中的第幾個月(month) | 1~12 |
第五個"*" | 一周當(dāng)中的星期幾(week) | 0~7(0和7都代表星期日) |
在時間表示中,還有一些特殊符號需要學(xué)習(xí),如表 3 所示。
?
特殊符號 | 含義 |
---|---|
*(星號) | 代表任何時間。比如第一個"*"就代表一小時種每分鐘都執(zhí)行一次的意思。 |
,(逗號) | 代表不連續(xù)的時間。比如"0 8,12,16***命令"就代表在每天的 8 點 0 分、12 點 0 分、16 點 0 分都執(zhí)行一次命令。 |
-(中杠) | 代表連續(xù)的時間范圍。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨?5 點 0 分執(zhí)行命令。 |
/(正斜線) | 代表每隔多久執(zhí)行一次。比如"*/10****命令",代表每隔 10 分鐘就執(zhí)行一次命令。 |
當(dāng)“crontab -e”編輯完成之后,一旦保存退出,那么這個定時任務(wù)實際就會寫入 /var/spool/cron/ 目錄中,每個用戶的定時任務(wù)用自己的用戶名進(jìn)行區(qū)分。而且 crontab 命令只要保存就會生效,只要 crond 服務(wù)是啟動的。知道了這 5 個時間字段的含義,我們多舉幾個時間的例子來熟悉一下時間字段,如表 4 所示。
?
時間 | 含義 |
---|---|
45 22 ***命令 | 在 22 點 45 分執(zhí)行命令 |
0 17 ** 1命令 | 在每周一的 17 點 0 分執(zhí)行命令 |
0 5 1,15**命令 | 在每月 1 日和 15 日的凌晨 5 點 0 分執(zhí)行命令 |
40 4 ** 1-5命令 | 在每周一到周五的凌晨 4 點 40 分執(zhí)行命令 |
*/10 4 ***命令 | 在每天的凌晨 4 點,每隔 10 分鐘執(zhí)行一次命令 |
0 0 1,15 * 1命令 | 在每月 1 日和 15 日,每周一個 0 點 0 分都會執(zhí)行命令,注意:星期幾和幾日最好不要同時出現(xiàn),因為它們定義的都是天,非常容易讓管理員混淆 |
現(xiàn)在我們已經(jīng)對這 5 個時間字段非常熟悉了,可是在“執(zhí)行的任務(wù)”字段中都可以寫什么呢?既可以定時執(zhí)行系統(tǒng)命令,也可以定時執(zhí)行某個 Shell 腳本,這里舉幾個實際的例子。
【例 1】讓系統(tǒng)每隔 5 分鐘就向 /tmp/test 文件中寫入一行“11”,驗證一下系統(tǒng)定時任務(wù)是否會執(zhí)行。
[root@localhost ~]# crontab -e
#進(jìn)入編輯界面
*/5 * * * * /bin/echo "11" >> /tmp/test
這個任務(wù)在時間工作中沒有任何意義,但是可以很簡單地驗證我們的定時任務(wù)是否可以正常執(zhí)行。如果覺得每隔 5 分鐘太長,那就換成“*”,讓它每分鐘執(zhí)行一次。而且和 at 命令一樣,如果我們定時執(zhí)行的是系統(tǒng)命令,那么最好使用絕對路徑。
【例 2】讓系統(tǒng)在每周二的凌晨 5 點 05 分重啟一次。
[root@localhost ~]# crontab -e
5.5 * * 2 /sbin/shutdown -r now
如果服務(wù)器的負(fù)載壓力比較大,則建議每周重啟一次,讓系統(tǒng)狀態(tài)歸零。比如絕大多數(shù)游戲服務(wù)器每周維護(hù)一次,維護(hù)時最主要的工作就是重啟,讓系統(tǒng)狀態(tài)歸零。這時可以讓我們的服務(wù)器自動來定時執(zhí)行。
【例 3】在每月 1 日、10 日、15 日的凌晨 3 點 30 分都定時執(zhí)行日志備份腳本 autobak.sh。
[root@localhost ~]# crontab -e
30.3 1,10,15 * * /root/sh/autobak.sh
這些定時任務(wù)保存之后,就可以在指定的時間執(zhí)行了。我們可以使用命令來查看和刪除定時任務(wù),命令如下:
[root@localhost ~]# crontab -l
#查看root用戶的crontab任務(wù)
*/5 * * * * /bin/echo "11" >> /tmp/test
5.5 * * 2 /sbin/shutdown -r now
30.3 1,10,15 * * /root/sh/autobak.sh
[root@localhost ~]# crontab -r
#刪除root用戶所有的定時任務(wù)。如果只想刪除某個定時任務(wù),則可以執(zhí)行“crontab -e”命令進(jìn)入
#編輯模式手工刪除
[root@localhost ~]# crontab -l
no crontab for root
#刪除后,再查詢就沒有root用戶的定時任務(wù)了文章來源:http://www.zghlxwxcb.cn/news/detail-499824.html
在書寫 crontab 定時任務(wù)時,需要注意以下幾個事項:文章來源地址http://www.zghlxwxcb.cn/news/detail-499824.html
- 6 個選項都不能為空,必須填寫。如果不確定,則使用“*”代表任意時間。
- crontab 定時任務(wù)的最小有效時間是分鐘,最大有效時間是月。像 2018 年某時執(zhí)行、3 點 30 分 30 秒這樣的時間都不能被識別。
- 在定義時間時,日期和星期最好不要在一條定時任務(wù)中出現(xiàn),因為它們都以天為單位,非常容易讓管理員混淆。
- 在定時任務(wù)中,不管是直接寫命令,還是在腳本中寫命令,最好都使用絕對路徑。有時使用相對路徑的命令會報錯。
到了這里,關(guān)于【運維】Linux定時任務(wù) 定時執(zhí)行腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!