踩坑記錄之crontab每10秒執(zhí)行一次問(wèn)題
crontab每10秒執(zhí)行一次問(wèn)題
需求:linux中使用crontab每十秒執(zhí)行一次
場(chǎng)景:需要在ubuntu14服務(wù)器中使用代理每十秒執(zhí)行一次curl來(lái)訪問(wèn)互聯(lián)網(wǎng),來(lái)測(cè)試代理網(wǎng)絡(luò)穩(wěn)定性。
經(jīng)過(guò)網(wǎng)上的大量搜貼之后得到的可用的一個(gè)結(jié)論如下:
# crontab -e * * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 30; /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 40; /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 50; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果你是直接一梭子全復(fù)制,改下目錄那么恭喜你完成了計(jì)劃任務(wù)。而我就不是了,我只寫(xiě)了sleep 10 這條然后任務(wù)沒(méi)有執(zhí)行。這就是坑。
坑1 .上面sleep 10 20 30 ...是啥意思啊,怎么個(gè)規(guī)則啊。一頭霧水,當(dāng)時(shí)我是直接把第二個(gè)sleep 10 那個(gè)定時(shí)任務(wù)直接粘進(jìn)去的。然后,任務(wù)沒(méi)有執(zhí)行就一直糾結(jié)任務(wù)沒(méi)有執(zhí)行這個(gè)問(wèn)題。
坑2.ubuntu系統(tǒng)第一次使用crontab -e 需要選擇比編輯器,如果選nano上,對(duì)我這種小白可就蒙圈。最后在命令行使用, select-ediort 來(lái)選擇編輯器選3 vim 就好了
后來(lái),明白后做了實(shí)驗(yàn)。
如果只寫(xiě)前兩條的話是:在每分鐘的第一秒和第一個(gè)10秒執(zhí)行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
以此類推只寫(xiě)前三的話就是:
在每分鐘的第一、第一個(gè)十秒、第二個(gè)十秒分別執(zhí)行一次
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 10; /usr/local/cc.sh >>/usr/local/log.txt 2>&1 * * * * * sleep 20; /usr/local/cc.sh >>/usr/local/log.txt 2>&1
如果都寫(xiě)上的話就是每十秒執(zhí)行一次啦,完美過(guò)程
過(guò)程遇到的問(wèn)題(1):crontab -e 完都有新郵件
原因:
1.crontab 每次執(zhí)行完程序產(chǎn)生的輸出都會(huì)發(fā)郵件到/var/mail/root
2.定時(shí)任務(wù)語(yǔ)法有誤,/var/mail/root 發(fā)送的是錯(cuò)誤日志,如下
root@bogon:/usr/local# tail -20 /var/mail/root
From root@bogon Tue May 21 18:31:11 2019Return-Path: <root@bogon>X-Original-To: rootDelivered-To: root@bogonReceived: by bogon (Postfix, from userid 0) id AAFCB43077; Tue, 21 May 2019 18:31:11 +0800 (CST)From: root@bogon (Cron Daemon)To: root@bogonSubject: Cron <root@bogon> sleep 10; sh /home/liuxin/curl-status.sh >dev/null 2>&1Content-Type: text/plain; charset=ANSI_X3.4-1968X-Cron-Env: <SHELL=/bin/sh>X-Cron-Env: <HOME=/root>X-Cron-Env: <PATH=/usr/bin:/bin>X-Cron-Env: <LOGNAME=root>Message-Id: <20190521103111.AAFCB43077@bogon>Date: Tue, 21 May 2019 18:31:11 +0800 (CST) /bin/sh: 1: cannot create dev/null: Directory nonexistent
解決:
如果是1的話就放到黑洞 >/dev/null 2>&1
* * * * * /usr/local/cc.sh >/dev/null 2>&1
精講:
1,/dev/null是linux系統(tǒng)的一個(gè)垃圾桶(一個(gè)不正經(jīng)的比喻)有不用的輸出都可以往里面扔。>/dev/null 缺省默認(rèn)是1 即 1>/dev/null
2,linux中有三種標(biāo)準(zhǔn)輸入輸出,分別是STDIN,STDOUT,STDERR,對(duì)應(yīng)的數(shù)字是0,1,2 2>&1就是把2錯(cuò)誤輸出重定向到1標(biāo)準(zhǔn)輸出 而1又輸出到/dev/null黑洞
如果不想輸出到一個(gè)文件可以這樣寫(xiě)
* * * * * /usr/local/cc.sh >>/usr/local/log.txt 2>&1
過(guò)程中遇到的問(wèn)題(2):如圖crontab -e 后是新文件
解決:crontab語(yǔ)法錯(cuò)誤再三檢查后,建議select-editor 選3 vim
linux crontab使用技巧
crontab命令主要用于設(shè)置命令行或者腳本周期性的執(zhí)行。該命令從標(biāo)準(zhǔn)輸入設(shè)備讀取指令,并將其存放于文件中,以供之后讀取和執(zhí)行。
主要講述crontb命令的基本語(yǔ)法和配置方法。
crontab命令格式
crontab [-u user] -e -l -r
-u
用戶名,不加-u參數(shù)默認(rèn)為當(dāng)前用戶。-e
編輯crontab文件。-l
列出crontab文件中的內(nèi)容。取值來(lái)源為/var/spool/cron下對(duì)應(yīng)的文件-r
刪除crontab文件。
crontab命令格式
# Example of job definition: ?.---------------- minute (0 - 59) ?| ?.------------- hour (0 - 23) ?| ?| ?.---------- day of month (1 - 31) ?| ?| ?| ?.------- month (1 - 12) OR jan,feb,mar,apr ... ?| ?| ?| ?| ?.---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat ?| ?| ?| ?| ?| ?* ?* ?* ?* ?* command/script
一個(gè)定時(shí)任務(wù)的配置共包括6個(gè)字段,分別是分、時(shí)、日、月、周、命令行或腳本,每一列取值的范圍或者含義如上述格式中注釋描述。
特別注意一點(diǎn)是命令行或者腳本一定要配置成絕對(duì)路徑。
特殊字段說(shuō)明
- 星號(hào)(*):代表所有可能的值,例如在第1列表示每分鐘執(zhí)行,第2列表示每小時(shí)執(zhí)行,第3列表示每天執(zhí)行。
- 逗號(hào)(,):可以用逗號(hào)隔開(kāi)的值表示指定一個(gè)列表范圍,例如,在第1列設(shè)置15,30,45表示在第15分鐘、30分鐘、45分鐘執(zhí)行。
- 中杠(-):可以用整數(shù)之間的中杠表示一個(gè)整數(shù)范圍,例如"2-6"表示2,3,4,5,6
- 正斜線(/):可以用正斜線指定時(shí)間的間隔頻率,例如第2列設(shè)置成"*/2",表示每?jī)尚r(shí)執(zhí)行一次。
每天晚上10點(diǎn)運(yùn)行rumenz.sh腳本
0 22 * * * /root/rumenz.sh
每月的1,3,7的早上8.30運(yùn)行rumenz.sh
> 30 8 1,3,7 * * /root/rumenz.sh
每周六,日的的凌晨2點(diǎn)執(zhí)行rumenz.sh
> 0 2 * * 6,0 /root/rumenz.txt
每天的的18點(diǎn)到23點(diǎn)每30分執(zhí)行rumenz.sh
0,30 18-23 * * /root/rumenz.sh //或者 */30 18-23 * * /root/rumenz.sh
每天凌晨2點(diǎn)訪問(wèn)一個(gè)網(wǎng)址
> 0 2 * * * /usr/bin/curl https://rumenz.com
crontab每10秒執(zhí)行一次rumenz.sh
* * * * * /root/rumenz.sh * * * * * sleep 10;/root/rumenz.sh * * * * * sleep 20;/root/rumenz.sh * * * * * sleep 30;/root/rumenz.sh * * * * * sleep 40;/root/rumenz.sh * * * * * sleep 50;/root/rumenz.sh
每 90 分鐘運(yùn)行一次rumenz.sh
0 0-21/3 * * * /root/rumenz.sh 30 0-22/3 * * * /root/rumenz.sh
需要兩個(gè)表達(dá)式實(shí)現(xiàn)
每90秒執(zhí)行一次rumenz.sh
*/3 * * * * /root/rumenz.sh */3 * * * * sleep 90;/root/rumenz.sh
需要兩個(gè)表達(dá)式實(shí)現(xiàn)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Centos7中Nginx開(kāi)機(jī)自啟動(dòng)的解決辦法
本篇文章主要介紹了詳解Centos7中Nginx開(kāi)機(jī)自啟動(dòng)的解決辦法,具有一定的參加價(jià)值,有興趣的可以了解一下。2017-03-03Nginx出現(xiàn)500 Internal Server Error 錯(cuò)誤的解決方案
這篇文章主要介紹了Nginx出現(xiàn)500 Internal Server Error 錯(cuò)誤的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11入域的Windows訪問(wèn)未入域的Samba服務(wù)方法介紹
這篇文章主要介紹了入域的Windows訪問(wèn)未入域的Samba服務(wù)方法介紹,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01使用nginx來(lái)負(fù)載均衡 本文在window與linux下配置nginx實(shí)現(xiàn)負(fù)載
使用nginx來(lái)負(fù)載均衡,本文在window與linux下配置nginx實(shí)現(xiàn)負(fù)載2010-03-03