Linux基础系列(六)Linux系统定时任务Crond
Linux系統(tǒng)定時(shí)任務(wù)Crond
Crond是什么
Crond是Linux系統(tǒng)中用來定期執(zhí)行命令或指定程序任務(wù)的一種服務(wù)或軟件。
特殊需求:(秒級(jí)別)crond服務(wù)就無法搞定,一般工作中邪腳本守護(hù)進(jìn)程執(zhí)行(一般用不上)
為什么要使用crond定時(shí)任務(wù)
Linux系統(tǒng)的定時(shí)任務(wù)crond,相當(dāng)于我們平時(shí)生活中得鬧鐘功能。可以滿足周期性執(zhí)行任務(wù)的需求。
Linux系統(tǒng)的定時(shí)任務(wù)
Linux系統(tǒng)中定時(shí)任務(wù)調(diào)度的工作可以分為以下兩種情況
1.Linux系統(tǒng)自身定期執(zhí)行的任務(wù)工作:系統(tǒng)周期性執(zhí)行的任務(wù)工作,如輪詢系統(tǒng)日志,備份系統(tǒng)數(shù)據(jù),清理系統(tǒng)緩存等
2.用戶執(zhí)行的任務(wù)工作:例如每隔5分鐘和互聯(lián)網(wǎng)上時(shí)間服務(wù)器進(jìn)行時(shí)間同步。一般這些工作需要用戶自行設(shè)置。
[root@student?~]#?crontab?-l ####time?sync?by?xuliangwei?2015-07-30 */5?*?*?*?*?/usr/sbin/ntpdate?time.windows.com?>/dev/null?2>&1定時(shí)任務(wù)crond使用說明
[root@student?~]#?crontab?--help crontab:?invalid?option?--?'-' crontab:?usage?error:?unrecognized?option usage:??crontab?[-u?user]?filecrontab?[-u?user]?[?-e?|?-l?|?-r?](default?operation?is?replace,?per?1003.2)-e??????(edit?user's?crontab)-l??????(list?user's?crontab)-r??????(delete?user's?crontab)-i??????(prompt?before?deleting?user's?crontab)-s??????(selinux?context)指令選項(xiàng)說明表
參數(shù)含義指定示例
-e編輯crontab文件內(nèi)容crontab?-e -l查看crontab文件內(nèi)容crontab?-l -i刪除crontab文件內(nèi)容,刪除前會(huì)提示確認(rèn)Crontab?-ri -r刪除crontab文件內(nèi)容crontab?-r -u指定使用的用戶執(zhí)行任務(wù)crontab?-u?xuliangwei?-l提示:crontab {-l -e}實(shí)際上就是在操作/var/spool/cron/當(dāng)前用戶這樣的文件
crontab語法格式中時(shí)間段含義表
段含義取值范圍
第一段代表分鐘00-59 第二段代表小時(shí)00-23 第三段代表日期01-31 第四段代表月份01-12 第五段代表星期0-7(0和7都代表星期天)crontab語法格式特殊符號(hào)含義表
特殊符號(hào)含義
**號(hào)表示任意時(shí)間都,就是”每”的意思,舉例:如 00 01 * * * cmd 表示每月每周每日的凌晨1點(diǎn)執(zhí)行cmd命令
-減號(hào),表示分隔符,表示一個(gè)時(shí)間范圍段,如17-19點(diǎn),每小時(shí)00分執(zhí)行任務(wù) 00 17-19 * * * cmd 就是17,18,19整點(diǎn)分別執(zhí)行
,逗號(hào),表示分隔符時(shí)間段的意思。30 20,21,22 * * * cmd 表示每天20,21,22點(diǎn)得半點(diǎn)執(zhí)行cmd。?
?/nn代表數(shù)字,即”每隔n單位時(shí)間”例如:每10分鐘執(zhí)行一次任務(wù) */10 * * * * cmd ? 其中*/10 ?也可以寫成 ?0-59/10
使用者權(quán)限及定時(shí)任務(wù)文件
文件說明
/etc/crontabCrontab配置文件
/etc/cron.deny該文件中所列用戶不允許使用crontab命令。
/var/spool/cron所有用戶crontab配置文件默認(rèn)都存放在此目錄,文件以用戶名命名。
生產(chǎn)中書寫定時(shí)任務(wù)的要領(lǐng)
為定時(shí)任務(wù)規(guī)則加必要的注釋
[root@student?~]#?crontab?-l ####time?sync?by?xuliangwei?2015-07-30 */5?*?*?*?*?/usr/sbin/ntpdate?time.windows.com?>/dev/null?2>&1定時(shí)任務(wù)命令或程序最好寫到腳本里執(zhí)行
[root@student?~]#?crontab?-l ####backup?www?to?/backup?xuliangwei?2015-07-30 00?01?*?*?*?/bin/sh?/server/scripts/www_backup.sh?>/dev/null?2>&1定時(shí)任務(wù)執(zhí)行的腳本要規(guī)范路徑(/server/scripts)
[root@student?~]#?crontab?-l ####backup?www?to?/backup?xuliangwei?2015-07-30 00?01?*?*?*?/bin/sh?/server/scripts/www_backup.sh?>/dev/null?2>&1執(zhí)行shell腳本任務(wù)前加/bin/sh
[root@student?~]#?crontab?-l ####backup?www?to?/backup?xuliangwei?2015-07-30 00?01?*?*?*?/bin/sh?/server/scripts/www_backup.sh?>/dev/null?2>&1定時(shí)任務(wù)命令或腳本結(jié)尾加>/dev/null 2>&1
[root@student?~]#?crontab?-l ####backup?www?to?/backup?xuliangwei?2015-07-30 00?01?*?*?*?/bin/sh?/server/scripts/www_backup.sh?>/dev/null?2>&1在指定用戶下執(zhí)行相關(guān)的定時(shí)任務(wù)
這里要特別注意不同用戶的環(huán)境變量問題,如果是調(diào)用了系統(tǒng)環(huán)境變量/etc/profile,最好在程序腳本中將用到得環(huán)境變量重新export下。
生產(chǎn)任務(wù)程序不要隨意打印輸出信息
在調(diào)試好腳本程序后,應(yīng)盡量把DEBUG及命令的輸出信息屏蔽掉,如果確實(shí)需要輸出日志,可定向到日志文件里,避免產(chǎn)生系統(tǒng)垃圾。
配置定時(shí)任務(wù)規(guī)范操作過程
1)配置定時(shí)任務(wù)規(guī)范操作過程,防止出錯(cuò)。
2)首先要在命令操作成功,然后復(fù)制成功的命令到腳本里,在各個(gè)細(xì)小環(huán)節(jié)減少出錯(cuò)的機(jī)會(huì)
3)然后測(cè)試腳本,測(cè)試成功后,復(fù)制腳本的規(guī)范路徑到定時(shí)任務(wù)配置里,不要手敲。
生產(chǎn)中如何調(diào)試定時(shí)任務(wù)
規(guī)范的公司開發(fā)和運(yùn)維人員操作流程:
個(gè)人的開發(fā)配置環(huán)境→辦公室測(cè)試環(huán)境→idc機(jī)房測(cè)試環(huán)境→idc機(jī)房正式環(huán)境。
增加執(zhí)行任務(wù)頻率調(diào)試任務(wù)
在調(diào)試時(shí),把任務(wù)執(zhí)行頻率調(diào)快一點(diǎn),看能不能正常執(zhí)行,如果正常,那就沒問題,再改成需要的任務(wù)的執(zhí)行時(shí)間。
注意:有些任務(wù)時(shí),不允許頻繁執(zhí)行,例如:定時(shí)往數(shù)據(jù)庫里插入數(shù)據(jù),這樣的任務(wù)要在測(cè)試機(jī)上測(cè)試好,然后正式線上出問題的機(jī)會(huì)就少了。
調(diào)整系統(tǒng)時(shí)間調(diào)試任務(wù)
用正確的執(zhí)行任務(wù)的時(shí)間,設(shè)置完成后,可以修改下系統(tǒng)當(dāng)前時(shí)間,改成任務(wù)執(zhí)行時(shí)間的前幾分鐘來測(cè)試(或者重啟定時(shí)任務(wù)服務(wù))
注意:(不能直接用于生產(chǎn)環(huán)境),保證5分鐘
通過腳本日志輸出調(diào)試定時(shí)任務(wù)
在腳本中加入日志輸出,然后把輸出打到指定的日志中,然后觀察日志內(nèi)容的結(jié)果,看是否正確執(zhí)行。
注意一些任務(wù)命令帶來的問題
* * * * * echo “xuliangwei” >>/tmp/xlw.log >/dev/null 2>&1 這里隱藏的無法正確執(zhí)行的任務(wù)配置,原因是前面多了>>,或者去掉后面的 >/dev/null 2>&1
注意環(huán)境變量導(dǎo)致的定時(shí)任務(wù)故障
例如:在調(diào)試java程序任務(wù)的時(shí)候,注意環(huán)境變量,把環(huán)境變量的定義加到腳本里。
通過crond定時(shí)任務(wù)服務(wù)日志調(diào)試定時(shí)任務(wù)
[root@student?~]#?tail?-f?/var/log/cron Jul?31?12:15:01?student?CROND[7530]:?(root)?CMD?(/usr/sbin/ntpdate?time.windows.com?>/dev/null?2>&1) Jul?31?12:15:29?student?crontab[7527]:?(root)?REPLACE?(root)生產(chǎn)中定時(shí)任務(wù)10簡(jiǎn)言
系統(tǒng)環(huán)境變量問題
腳本權(quán)限問題加 /bin/sh
實(shí)踐變量問題用反斜線\%轉(zhuǎn)義,最好使用腳本。
>/dev/null 2>&1問題
定時(shí)任務(wù)規(guī)則之前加注釋
使用腳本程序替代命令行定時(shí)任務(wù)
避免不必要的程序及命令輸出
1)切到目標(biāo)目錄的上一級(jí)打包目標(biāo)
2)定時(shí)任務(wù)腳本中的程序命令盡量用全路徑(和環(huán)境變量的識(shí)別有關(guān))
轉(zhuǎn)載于:https://blog.51cto.com/liangweilinux/1681210
總結(jié)
以上是生活随笔為你收集整理的Linux基础系列(六)Linux系统定时任务Crond的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大中型网站集群架构企业级高标准全自动实战
- 下一篇: 模拟STL链表类的实现