當(dāng)你需要在Linux系統(tǒng)中定期執(zhí)行某些任務(wù)時,crontab(cron table)是一個非常有用的工具。它允許你根據(jù)預(yù)定的時間表創(chuàng)建和管理定時任務(wù)。
一、從守護(hù)進(jìn)程到crond進(jìn)程
1.1 Linux 守護(hù)進(jìn)程
按照進(jìn)程的功能和運(yùn)行的程序分類,進(jìn)程可劃分為兩大類。
- 系統(tǒng)進(jìn)程:可以執(zhí)行內(nèi)存資源分配和進(jìn)程切換等管理工作;而且,該進(jìn)程的運(yùn)行不受用戶的干預(yù),即使是root用戶也不能干預(yù)系統(tǒng)進(jìn)程的運(yùn)行。
- 用戶進(jìn)程:通過執(zhí)行用戶程序、應(yīng)用程序或內(nèi)核之外的系統(tǒng)程序而產(chǎn)生的進(jìn)程,此類進(jìn)程可以在用戶的控制下運(yùn)行或關(guān)閉。
針對用戶進(jìn)程,又可以分為交互進(jìn)程、批處理進(jìn)程和守護(hù)進(jìn)程三類。
- 交互進(jìn)程:由一個shell終端啟動的進(jìn)程,在執(zhí)行過程中,需要與用戶進(jìn)行交互操作,可以運(yùn)行于前臺,也可以運(yùn)行在后臺。
- 批處理進(jìn)程:該進(jìn)程是一個進(jìn)程集合,負(fù)責(zé)按順序啟動其他的進(jìn)程。
-
守護(hù)進(jìn)程:守護(hù)進(jìn)程是一直運(yùn)行的一種進(jìn)程,經(jīng)常在Linux系統(tǒng)啟動時啟動,在系統(tǒng)關(guān)閉時終止。它們獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。例如,httpd進(jìn)程一直處于運(yùn)行狀態(tài),等待用戶的訪問。還有經(jīng)常用的
crond
進(jìn)程,這個進(jìn)程類似于Windows地計劃任務(wù),可以周期性地執(zhí)行用戶設(shè)定的某些任務(wù)。
1.2 任務(wù)調(diào)度進(jìn)程crond
crond
是 Linux 下用來周期性地執(zhí)行某種任務(wù)或等待處理某些事件的一個守護(hù)進(jìn)程,與Windows下的計劃任務(wù)類似。當(dāng)安裝完成操作系統(tǒng)后,默認(rèn)會安裝此服務(wù)工具,并且會自動啟動crond進(jìn)程,crond進(jìn)程每分鐘會定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動執(zhí)行該任務(wù)。
Linux下的任務(wù)調(diào)度分為兩類,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。
(1)系統(tǒng)任務(wù)調(diào)度: 系統(tǒng)周期性要執(zhí)行的工作,比如寫緩存數(shù)據(jù)到硬盤、清理日志等。在/etc目錄下有一個crontab文件,這個就是系統(tǒng)任務(wù)調(diào)度的配置文件。
打開該文件,可以看到這些內(nèi)容:nvim /etc/crontab
上圖中:
- 第七行:指定系統(tǒng)使用的shell程序;
- 第八行:命令的查找路徑。(這前面2行就是設(shè)置環(huán)境變量)
- 18~21行:定時任務(wù)
(2)用戶任務(wù)調(diào)度: 用戶定期要執(zhí)行的工作,比如用戶數(shù)據(jù)備份、定時郵件提醒等。用戶可以使用crontab
工具來定制自己的計劃任務(wù)。所有用戶定義的crontab 文件都保存在 /var/spool/cron
目錄中。其文件名與用戶名一致。
二、 crontab 詳細(xì)介紹
crontab文件:每個用戶都有一個獨(dú)立的crontab文件,用于存儲他們的定時任務(wù)。這些文件通常位于/var/spool/cron/
目錄下,或者還有一級目錄,以用戶名命名。
2.1 crontab 命令格式
crontab常用的使用格式有如下兩種。
crontab [-u user] [file] # 用于安裝(載入)任務(wù)
crontab [-u user] [-e|-l|-r |-i] # 用于編輯、查看、刪除
選項含義如下:
-
-u user
:用來設(shè)定某個用戶的crontab服務(wù)。例如,“-u ixdba”表示設(shè)定ixdba用戶的crontab服務(wù),此參數(shù)一般由root用戶來運(yùn)行。 -
file
:file是命令文件的名字,表示將file作為crontab的任務(wù)列表文件并載入crontab。如果在命令行中沒有指定這個文件,crontab命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將它們載入crontab。 -
-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)提示。
2.2 crontab文件的含義
用戶所建立的crontab文件中,每一行都代表一項任務(wù),每行的每個字段代表一項設(shè)置。
它的格式共分為7個字段,前5個字段是時間設(shè)定段,第6個字段是執(zhí)行的用戶,第7個字段是要執(zhí)行的命令段,格式如下。
minute hour day month week user command
其中。
minute
:表示分鐘,可以是0~59的任何整數(shù)。hour
:表示小時,可以是0~23的任何整數(shù)。day
:表示日期,可以是1~31的任何整數(shù)。month
:表示月份,可以是1~12的任何整數(shù)。week
:表示星期幾,可以是0~7的任何整數(shù),這里的0或7代表星期日。user
:用戶名,執(zhí)行該任務(wù)的用戶。也可以沒有這個字段,文件中定義的任務(wù)將有文件的所有者執(zhí)行。command
:表示要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符。
星號(*):代表所有可能的值。例如,month 字段如果是星號,則表示在滿足其他字段的制約條件后每月都執(zhí)行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表范圍。例如,“1,2,5,7,8,9”。
中杠(-):可以用整數(shù)之間的中杠表示一個整數(shù)范圍。例如,“2-6”表示“2,3,4,5,6”。
正斜線(/):可以用正斜線指定時間的間隔頻率。例如,“0-23/2”表示每兩小時執(zhí)行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段中,表示每10分鐘執(zhí)行一次
2.3 實操:編寫crontab文件
我的系統(tǒng)里,crontab文件的位置是:/var/spool/cron/crontabs/root
打開,準(zhǔn)備編寫新任務(wù)是,發(fā)現(xiàn):
提示不要直接編輯這個文件,而應(yīng)該編輯另一個臨時的文件。
編輯,肯定是能編輯的,我有權(quán)限就行。但是上面的方式可能更安全一點(diǎn),防止錯誤,增加可維護(hù)性。那就按照推薦的來吧。
使用編輯命令:crontab -e
,會先讓你選擇編輯器,我使用vim來編輯。
發(fā)現(xiàn)默認(rèn)打開的是這個臨時文件:
那就來編輯一下:
編寫了一個定時任務(wù)來進(jìn)行測試,每隔一分鐘,在/root/crontest.txt這個文件末尾追加一行,內(nèi)容是系統(tǒng)的當(dāng)前時間(這里用到了date命令和輸出重定向)。
注意:這里我添加了前面2行,配置環(huán)境變量,是為了防止執(zhí)行任務(wù)的時候找不到命令。
編輯完成后保存,退出nvim。然后再查看var目錄下那個crontab文件,自動就更新了(那個臨時的文件會自動刪除)。
來看看定時任務(wù)的執(zhí)行效果:
沒問題。
crontab在Linux系統(tǒng)中有許多實際應(yīng)用場景,以下是一些常見的例子:
-
定時備份:你可以使用crontab來定期執(zhí)行備份腳本,以保護(hù)重要數(shù)據(jù)。例如,每天晚上執(zhí)行一個備份腳本,將關(guān)鍵文件復(fù)制到另一個位置或遠(yuǎn)程服務(wù)器。
-
日志清理:系統(tǒng)日志和應(yīng)用程序日志可能會占用大量磁盤空間。使用crontab可以定期清理過時的日志文件,以避免磁盤空間不足問題。
-
系統(tǒng)維護(hù)任務(wù):crontab可以用于自動化各種系統(tǒng)維護(hù)任務(wù),如更新軟件包、執(zhí)行磁盤碎片整理、優(yōu)化數(shù)據(jù)庫等。
-
數(shù)據(jù)同步:如果你有多個服務(wù)器需要進(jìn)行數(shù)據(jù)同步,你可以使用crontab來定期運(yùn)行數(shù)據(jù)同步腳本,以確保數(shù)據(jù)的一致性。
-
網(wǎng)站監(jiān)控:你可以使用crontab來定期檢查網(wǎng)站的可用性和響應(yīng)時間,以及監(jiān)測服務(wù)器的負(fù)載情況。這樣可以及時發(fā)現(xiàn)并解決潛在的問題。
-
定時任務(wù)提醒:你可以使用crontab來創(chuàng)建提醒任務(wù),例如每天早上發(fā)送一封電子郵件或彈出通知來提醒你重要的任務(wù)或事件。
這只是一小部分crontab的應(yīng)用示例。實際上,你可以根據(jù)自己的需求和創(chuàng)意使用crontab來執(zhí)行各種定時任務(wù),提高工作效率和自動化操作。文章來源:http://www.zghlxwxcb.cn/news/detail-689523.html
把 永 遠(yuǎn) 愛 你 寫 進(jìn) 詩 的 結(jié) 尾 ~ 文章來源地址http://www.zghlxwxcb.cn/news/detail-689523.html
到了這里,關(guān)于【Linux】crontab 定時任務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!