前言
本文思維導(dǎo)圖概述的主要內(nèi)容:
一、crontab 介紹
1.1 什么是 crontab
Crontab 是一個在 Unix 和 Linux 操作系統(tǒng)上用于定時執(zhí)行任務(wù)的工具。它允許用戶創(chuàng)建和管理計劃任務(wù),以便在特定的時間間隔或時間點自動運行命令或腳本。Crontab 是 cron table
的縮寫,cron
指的是 Unix 系統(tǒng)中的一個后臺進程,它用于執(zhí)行預(yù)定的任務(wù)。
Crontab 文件包含一系列計劃任務(wù)條目,每個條目都定義了一個任務(wù)的執(zhí)行時間和要運行的命令或腳本。這些任務(wù)可以按照分鐘、小時、日、月和星期等不同的時間單位進行安排。
1.2 crontab 命令工作流程
crontab 命令通常用于在 Linux 系統(tǒng)中設(shè)置定期執(zhí)行的任務(wù),并將這些任務(wù)存儲在 crontab 文件中。為了使用 crontab 命令,系統(tǒng)需要依賴crond 服務(wù)
的支持。通常情況下,在操作系統(tǒng)安裝時,crond服務(wù)會被默認(rèn)安裝并自動啟動。crond進程會每分鐘定期檢查crontab文件中的任務(wù)列表,以確定是否有需要執(zhí)行的任務(wù),如果有,它會自動執(zhí)行這些任務(wù)。
下面一張拓?fù)鋱D方便理解:
可以總結(jié)為:只有安裝了 crond 服務(wù)以后 crontab 命令才能使用,crontab 命令按照指定的格式編輯定時任務(wù)保存在 crontab 文件中,crond 服務(wù)會每分鐘定期查看 crontab 文件中的定時任務(wù)列表去執(zhí)行任務(wù)。
1.3 Linux 定時任務(wù)分類
Linux 系統(tǒng)下的任務(wù)調(diào)度分為兩類:系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。
- 系統(tǒng)任務(wù)調(diào)度:系統(tǒng)周期性所要執(zhí)行的工作,比如寫緩存數(shù)據(jù)到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統(tǒng)任務(wù)調(diào)度的配置文件。
- 用戶任務(wù)調(diào)度:用戶自定義的定期要執(zhí)行的工作,用戶可以使用 crontab 工具來定制自己的計劃任務(wù),所有用戶自定義的 crontab 文件都被保存在
/var/spool/cron
目錄中。其文件名與用戶名一致,例如我用 test 用戶設(shè)置了一個定時任務(wù),那么其對應(yīng)的 crontab 文件就是/var/spool/cron/test
。
二、crontab 用法詳解
2.1 crond 服務(wù)安裝
一般情況下crond服務(wù)在安裝系統(tǒng)的時候會被默認(rèn)安裝,并自動運行。
centos 或者紅帽系統(tǒng)下檢查服務(wù)是否安裝:
systemctl status crond
如果顯示 Unit crond.service could not be found.,則需要安裝crond服務(wù)。
# crond 安裝:
yum -y install crontabs
# 啟動 crond 服務(wù):
systemctl start crond
# 關(guān)閉 crond 服務(wù):
systemctl stop crond
# crond設(shè)置開機自啟動:
systemctl enable crond
# 重新載入配置
systemctl reload crond
# 查看 crontab 服務(wù)是否已經(jīng)加入了開機啟動
chkconfig crond --list
# 加入開機自動啟動
chkconfig crond on
2.2 crontab 文件內(nèi)容分析
如前所述,我們已經(jīng)了解了使用 crontab 命令來編輯并保存定時任務(wù)到 crontab 文件中?,F(xiàn)在,讓我們深入了解一下定時任務(wù)的格式是怎么樣的。
你可以執(zhí)行以下命令來查看 crontab 文件的示例內(nèi)容:
前四行是用來配置 crond 任務(wù)運行的環(huán)境變量
第一行 SHELL 變量指定了系統(tǒng)要使用哪個 shell,這里是 bash
第二行 PATH 變量指定了系統(tǒng)執(zhí)行命令的路徑
第三行 MAILTO 變量指定了 crond 的任務(wù)執(zhí)行信息將通過電子郵件發(fā)送給 root 用戶
如果 MAILTO 變量的值為空,則表示不發(fā)送任務(wù)執(zhí)行信息給用戶
最后一行是 Crontab 的條目,基本格式如下:
* * * * * user-name command to be executed
就是通過設(shè)置 crontab 文件中的這五個*
來確定任務(wù)的執(zhí)行時間的, user-name 是執(zhí)行任務(wù)的用戶,command to be executed 是要執(zhí)行的命令或者腳本任務(wù),我們具體來看下這五個*
所代表的含義。
其中,星號代表通配符,表示可以匹配任何值。每個星號代表不同的時間單位:
- 第一個星號表示分鐘(0-59)
- 第二個星號表示小時(0-23)
- 第三個星號表示一個月中的某一天(1-31)
- 第四個星號表示月份(1-12或者用縮寫,如1表示一月,2表示二月)
- 第五個星號表示星期幾(0-7或者用縮寫,0和7都表示星期日,1表示星期一,以此類推)
其實,除了*
這個字符之外還有其他的特殊字符,用來滿足不同的定時需求。
特殊符號 | 含義 | 舉例說明 |
---|---|---|
*(星號) | 表示任何時間 | 例如: * 8 * * * 表示每天 8 點的每一分鐘都執(zhí)行一次命令 |
,(逗號) | 用逗號隔開表示該字段的取值 | 例如:10 8,10,12 * * * 表示在每天的 8:10,10:10,12:10 都會執(zhí)行一次命令 |
-(中杠) | 表示兩個整數(shù)之間的取值范圍 | 例如:10 8 * * 1-3 表示每周一到周三的 8:10 執(zhí)行一次命令 |
/(正斜線) | 表示間隔多久執(zhí)行一次 | 例如:* /10 * * * * 表示每隔 10 分鐘就執(zhí)行一次命令 |
總結(jié):
- 周和日最好不要同時用
- 定時任務(wù)要加注解
- 可以定向到日志文件或者空文件
- 定時任務(wù)一定是絕對路徑,且目錄必須存在才能出結(jié)果
- crontab 服務(wù)一定要開啟運行
2.3 crontab 命令用法
2.3.1 查看定時任務(wù)列表
使用下面命令進行查看定時任務(wù)列表
[test@hecs]# crontab -l # 查看定時任務(wù)列表
2.3.2 編輯/創(chuàng)建定時任務(wù)
實際上,在使用中,設(shè)置Crontab定時任務(wù)非常容易。只需切換到執(zhí)行命令的用戶,然后運行crontab -e
命令,這將打開一個空白文件,你只需在其中輸入要定時執(zhí)行的任務(wù)即可。
[test@hecs]# crontab -e # 編輯定時任務(wù)
#進入 crontab 編輯界面。會打開Vim編輯你的任務(wù)
*/10 * * * * /home/test/test.sh
編輯完保存之后,就會在/var/spool/cron/
目錄生成一個名字叫test文件,這個文件就是test用戶的crontab文件。
在crontab [選項] file 命令中, file 指的是命令文件的名字,表示將 file 作為 crontab 的任務(wù)列表文件并載入 crontab,若在命令行中未指定文件名,則此命令將接受標(biāo)準(zhǔn)輸入(鍵盤)上鍵入的命令,并將它們鍵入 crontab, 例如:crontab -u test /root/jobs.txt ,表示用/root/jobs.txt 這個文件中的任務(wù)列表載入crontab。
2.3.3 刪除定時任務(wù)
# 直接刪除不提示
[test@hecs]# crontab -r
或
# 刪除前給出提示確認(rèn)
[test@hecs]# crontab -i
執(zhí)行上述命令后,會從/var/spool/cron
目錄中刪除用戶的 crontab 文件,如果不指定用戶,則默認(rèn)刪除當(dāng)前用戶的 crontab 文件。
注意:執(zhí)行刪除命令后,即該用戶下所有的定時任務(wù)都會被刪除。如果只是想刪除某個定時任務(wù),用crontab -e
命令編輯 crontab 文件刪除某個任務(wù)即可。
2.3.4 其他 crontab 相關(guān)操作
(1)備份 crontab 文件
執(zhí)行下面的命令可以備份當(dāng)前的 crontab 文件
crontab -l > $HOME/mycron
(2)恢復(fù)丟失的 crontab 文件
如果不小心誤刪了crontab文件,假設(shè)你在自己的$HOME
目錄下還有一個備份,那么可以將其拷貝到/var/spool/cron/<username>
,其中 是用戶名。如果由于權(quán)限問題無法完成拷貝,可以用:crontab 其中,是你在$HOME
目錄中副本的文件名。
有些 crontab 的變體有些怪異,所以在使用 crontab 命令時要格外小心。如果遺漏了任何選項,crontab 可能會打開一個空文件,或者看起來像是個空文件。這時直接退出,不要按Ctrl-D
,否則你將丟失 crontab 文件。
三、crontab 的注意事項
3.1 注意環(huán)境變量問題
在 crontab 文件中定義多個調(diào)度任務(wù)時,需要特別注意的一個問題就是環(huán)境變量的設(shè)置
腳本中涉及文件路徑時寫全局路徑;
腳本執(zhí)行要用到j(luò)ava或其他環(huán)境變量時,通過source命令引入環(huán)境變量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
當(dāng)手動執(zhí)行腳本OK,但是crontab死活不執(zhí)行時。可以嘗試在crontab中直接引入環(huán)境變量解決問題。
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
3.2 系統(tǒng)級任務(wù)調(diào)度與用戶級任務(wù)調(diào)度
root 用戶的任務(wù)調(diào)度操作可以通過crontab -uroot -e
來設(shè)置,也可以將調(diào)度任務(wù)直接寫入/etc/crontab
文件,需要注意的是,如果要定義一個定時重啟系統(tǒng)的任務(wù),就必須將任務(wù)放到/etc/crontab
文件,即使在 root 用戶下創(chuàng)建一個定時重啟系統(tǒng)的任務(wù)也是無效的。
3.3 其他注意及總結(jié)
- 環(huán)境變量問題,例如crontab不能識別Java的環(huán)境變量
crontab執(zhí)行shell時,只能識別為數(shù)不多的環(huán)境變量,普通的環(huán)境變量是無法識別的,所以在編寫shell時,最好使用export重新聲明變量,確保腳本執(zhí)行。 - 命令的執(zhí)行最好用腳本
- 腳本權(quán)限加/bin/sh,規(guī)范路徑/server/scripts
- 時間變量用反斜線轉(zhuǎn)義,最好用腳本
- 定時任務(wù)添加注釋
-
>/dev/null 2>&1 ==>&>/dev/null
別隨意打印日志文件 - 定時任務(wù)一定是絕對路徑,且目錄必須存在才能出結(jié)果
- 避免不必要的程序以及命令輸出
- 定時任務(wù)之前添加注釋
- 打包到文件目錄的上一級
- 周和日最好不要同時用
- 可以定向到日志文件或者空文件
- crontab 服務(wù)一定要開啟運行
四、調(diào)試不起作用/失效的 crontab
4.1 失效的 crontab 調(diào)試解決辦法
當(dāng) crontab 突然失效時,可以嘗試/etc/init.d/crond restart
解決問題。或者查看日志看某個 job 有沒有執(zhí)行/報錯tail -f /var/log/cron
。
千萬別亂運行crontab -r
,這會從 crontab 目錄(/var/spool/cron)中刪除用戶的 crontab 文件。刪除了該用戶的所有 crontab 都沒了。
在 crontab 中%
是有特殊含義的,表示換行的意思。如果要用的話必須進行轉(zhuǎn)義\%
,如經(jīng)常用的date +%Y%m%d
在 crontab 里是不會執(zhí)行的,應(yīng)該換成date +\%Y\%m\%d
4.2 定時任務(wù)不執(zhí)行原因及解決辦法
定時任務(wù)設(shè)置的格式正確,手動執(zhí)行也沒問題,但是定時任務(wù)就是不執(zhí)行,這種情況的出現(xiàn),一般是由下面幾個原因造成的。
- crond服務(wù)未啟動
需要首先排查下crond服務(wù)是否啟動,可使用systemctl status crond 命令查看,如果未啟動,則啟動即可。 - 腳本無權(quán)限
如果要執(zhí)行腳本無權(quán)限,通過chmod命令加上權(quán)限即可。 - 文件路徑問題
定時任務(wù)要執(zhí)行的腳本中涉及文件路徑時,一定要寫全局路徑,不能寫相對路徑。 - 環(huán)境變量問題
定時任務(wù)要執(zhí)行的腳本要用到j(luò)ava或其他環(huán)境變量時,需要通過source命令引入環(huán)境變量。
[test@vm1]# cat test.sh
#!/bin/bash
source /etc/profile
java -jar /home/test/test.jar
文末送書《速學(xué)Linux:系統(tǒng)應(yīng)用從入門到精通》
今天博主推薦的是這本由Linux領(lǐng)域頭部號主,良許老師編寫的這本《速學(xué)Linux:系統(tǒng)應(yīng)用從入門到精通》
-
參與方式:關(guān)注博主,評論區(qū)留言即可參與
-
送出數(shù)量:暫定送出 1~3 本給粉絲
一本書打開Linux學(xué)習(xí)之門的鑰匙??!
- 京東官方購買鏈接:https://item.jd.com/14114382.html
博主推薦理由
如果你是剛開始學(xué)習(xí)Linux的小白同學(xué),相信你已經(jīng)體會到與學(xué)習(xí)一門編程語言相比,學(xué)習(xí)Linux系統(tǒng)的門檻相對較高,你會遇到一些困惑,比如:
-
為什么要學(xué)習(xí)Linux,學(xué)成之后我們可以在哪些領(lǐng)域大顯身手?
-
從Linux誕生以來,已經(jīng)出現(xiàn)了上百種各具特色的發(fā)行版本,我們該怎么選擇?
-
復(fù)雜的概念、指令一大堆,看起來就讓人頭大…
那么這本書可就太適合你了,它算得上打開Linux學(xué)習(xí)之門的鑰匙!
-
如果你是剛剛開始學(xué)習(xí)Linux的小白,那么本書可作為入門寶典,帶你快速入門Linux。
-
如果你希望獲得更多超值內(nèi)容,那么本書為你提供150段教學(xué)視頻+電子教案+學(xué)習(xí)資料,更有價值50元的5節(jié)精品線上課程。
-
如果你希望獲得更多實戰(zhàn)經(jīng)驗,那么本書提供了47個知識拓展和220個動手練習(xí)。
速學(xué) Linux,真的可以試試這本書!
本書內(nèi)容簡介
PART1:為什么學(xué)習(xí)Linux系統(tǒng)
最直接的原因就是Linux應(yīng)用十分廣泛,在實際工作的諸多方面都需要用到它。在大中小型企業(yè)的服務(wù)器應(yīng)用領(lǐng)域,Linxu系統(tǒng)的市場份額越來越重,也從側(cè)面說明Linux的出色表現(xiàn)和廣泛應(yīng)用。
Linux是一款基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU,且免費使用和自由傳播的操作系統(tǒng)。用戶可以通過網(wǎng)絡(luò)或其他途徑免費獲得,并可以任意修改其源代碼,這也是它區(qū)別于其他操作系統(tǒng)的地方。
Linux是自由軟件和開放源代碼軟件發(fā)展中最著名的例子。只要遵循GNU GPL(GNU通用公共許可證),任何個人或機構(gòu)都可以自由地使用Linux的所有底層源代碼,也可以自由地修改和再發(fā)布。因此,Linux也成為開源軟件的代名詞。
PART2:Linux系統(tǒng)的應(yīng)用領(lǐng)域
目前各種Linux發(fā)行版應(yīng)用于從嵌入式設(shè)備到超級計算機等很多場合,尤其在IT服務(wù)器領(lǐng)域,Linux已經(jīng)確立了主導(dǎo)地位,如圖所示.
服務(wù)器一般采用LAMP(Linux+Apache+MySQL+PHP)或LNMP(Linux+Nginx+MySQL+PHP)組合。
1.Linux 在服務(wù)器的應(yīng)用
隨著開源軟件在世界范圍內(nèi)影響力日益增強,Linux服務(wù)器操作系統(tǒng)在整個服務(wù)器操作系統(tǒng)市場中占據(jù)了越來越多的市場份額?已經(jīng)形成了大規(guī)模市場應(yīng)用的局面。
隨著Linux在服務(wù)器領(lǐng)域的廣泛應(yīng)用,已經(jīng)涉及電信、金融、政府、教育、交通、農(nóng)業(yè)和石油等領(lǐng)域?同時各大硬件廠商也相繼支持Linux操作系統(tǒng),表明了Linux在服務(wù)器市場前景是光明的,未來一定能夠沖擊更大的服務(wù)器市場。
2.嵌入式 Linux 的應(yīng)用
由于Linux系統(tǒng)開放源代碼、功能強大、穩(wěn)定性強且具有極大的伸縮性,再加上其廣泛支持大量的微處理器體系結(jié)構(gòu)、硬件設(shè)備、圖形支持和通信協(xié)議?因此也廣泛應(yīng)用在嵌入式領(lǐng)域。
目前Linux已經(jīng)廣泛應(yīng)用于手機、平板計算機、路由器、電視和電子游戲機等。在移動設(shè)備上廣泛使用的Android操作系統(tǒng)就是創(chuàng)建在Linux內(nèi)核之上的。此外,思科公司在網(wǎng)絡(luò)防火墻和路由器中使用的是定制的Linux,阿里云也開發(fā)了一套基于Linux的操作系統(tǒng)YunOS。
3.桌面 Linux 的應(yīng)用
近幾年,Linux桌面操作系統(tǒng)在國內(nèi)市場發(fā)展非常迅猛。如中標(biāo)麒麟Linux、紅旗Linux和深度Linux等系統(tǒng)軟件的廠商都推出了Linux桌面操作系統(tǒng),而且目前已經(jīng)在企業(yè)、OEM(原始設(shè)備制造商)和政府等領(lǐng)域廣泛應(yīng)用。
PART3:Linux的版本選擇
Linux系統(tǒng)的發(fā)行版本很多,即便是其忠實用戶也沒有太多時間和精力一一嘗試。對于初學(xué)者來說,在學(xué)習(xí)Linux之前需要一個明確的方向,從眾多版本中選擇一款適合自己需求的是非常重要的?這里將帶大家了解各個Linux版本之間的特點。
作者簡介
Linux領(lǐng)域頭部號主,線上超50萬粉絲;曾任職于世界500強外企;研究生國家獎學(xué)金獲得者;6年公眾號寫作經(jīng)歷,500余篇原創(chuàng)文章,部分文章閱讀量超100萬次;21年進軍短視頻領(lǐng)域,產(chǎn)出300余條短視頻原創(chuàng)文案,部分單視頻播放量超350萬次文章來源:http://www.zghlxwxcb.cn/news/detail-720046.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-720046.html
[ 本文作者 ] bluetata
[ 原文鏈接 ] https://bluetata.blog.csdn.net/article/details/133040340
[ 最后更新 ] 10/06/2023 20:03
[ 版權(quán)聲明 ] 如果您在非 CSDN 網(wǎng)站內(nèi)看到這一行,
說明網(wǎng)絡(luò)爬蟲可能在本人還沒有完整發(fā)布的時候就抓走了我的文章,
可能導(dǎo)致內(nèi)容不完整,請去上述的原文鏈接查看原文。
到了這里,關(guān)于【Linux 服務(wù)器運維】定時任務(wù) crontab 詳解 | 文末送書的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!