讓Linux下的cron以秒為單位執(zhí)行shell腳本的3種方法
需要用到Shell腳本每隔3秒鐘去監(jiān)控一個(gè)軟件進(jìn)程的運(yùn)行狀態(tài),發(fā)現(xiàn)crond似乎只支持到分,不知道秒,怎么辦呢?
第一種方法:
當(dāng)然首先想到的是寫(xiě)一個(gè)觸發(fā)的腳本,在觸發(fā)腳本中使用死循環(huán)來(lái)解決此問(wèn)題,如下:
cat kick.sh
#!/bin/bash
while : ;do
/home/somedir/scripts.sh 2>/dev/null &
sleep 3
done
注意第一次運(yùn)行時(shí)請(qǐng)不要使用 bash kick.sh & 這種后臺(tái)運(yùn)行的方式,它會(huì)僵死的。
可以把它放到計(jì)劃任務(wù)使其運(yùn)行,然后將計(jì)劃任務(wù)中的此條目刪除即可。最后把這個(gè)腳本放到 /etc/rc.local 讓它每次開(kāi)機(jī)都可以被運(yùn)行。
第二種方法:
和第一種方法類似,只不過(guò)感覺(jué)比第一種更便捷一些。
#!/bin/bash
#For excuting the scripts every 3 seconds in crond.
#20100124.WXG
for((i=1;i<=20;i++));do
/home/somedir/scripts.sh 2>/dev/null &
sleep 3
done
然后寫(xiě)入的crontab里每分鐘執(zhí)行一次,如下:
crontab -e
* * * * * /bin/bash /home/somedir/cron-seconds.sh
第三種方法:
那么如何使用計(jì)劃任務(wù)來(lái)直接實(shí)現(xiàn)呢?
最后解決方案如下,經(jīng)驗(yàn)證,腳本運(yùn)行非常穩(wěn)定。
crontab -e
## For excuting scripts.sh every 3 seconds##on 2014-10-15
*/1 * * * * /home/somedir/scripts.sh
*/1 * * * * sleep 3 && /home/somedir/scripts.sh
*/1 * * * * sleep 6 && /home/somedir/scripts.sh
*/1 * * * * sleep 9 && /home/somedir/scripts.sh
*/1 * * * * sleep 12 && /home/somedir/scripts.sh
*/1 * * * * sleep 15 && /home/somedir/scripts.sh
*/1 * * * * sleep 18 && /home/somedir/scripts.sh
*/1 * * * * sleep 21 && /home/somedir/scripts.sh
*/1 * * * * sleep 24 && /home/somedir/scripts.sh
*/1 * * * * sleep 27 && /home/somedir/scripts.sh
*/1 * * * * sleep 30 && /home/somedir/scripts.sh
*/1 * * * * sleep 33 && /home/somedir/scripts.sh
*/1 * * * * sleep 36 && /home/somedir/scripts.sh
*/1 * * * * sleep 39 && /home/somedir/scripts.sh
*/1 * * * * sleep 42 && /home/somedir/scripts.sh
*/1 * * * * sleep 45 && /home/somedir/scripts.sh
*/1 * * * * sleep 48 && /home/somedir/scripts.sh
*/1 * * * * sleep 51 && /home/somedir/scripts.sh
*/1 * * * * sleep 54 && /home/somedir/scripts.sh
*/1 * * * * sleep 57 && /home/somedir/scripts.sh
#-----------------------------------------------------------------
他的思路是:先每隔1秒鐘觸發(fā)定時(shí)任務(wù),然后又休眠 3秒、6秒、9秒等間隔 來(lái)執(zhí)行具體的Shell腳本。
我還是比較傾向于使用第三種方法的。因?yàn)榈谝环N方法和第二種方法并不是嚴(yán)格的間隔3秒執(zhí)行的,會(huì)大于3秒,因?yàn)閳?zhí)行scripts.sh也是需要一定時(shí)間的,即使已經(jīng)加了&符號(hào)放到了后臺(tái)執(zhí)行也會(huì)存在一定的誤差。如果對(duì)于精確度要求不高,推薦使用第二種方法。
工作中的一次用 PHP腳本每隔3秒鐘去監(jiān)控一個(gè)Memcached代理服務(wù)器Magent的運(yùn)行狀態(tài)。
crontab -e
#-----------------------------------------------------------------
*/1 * * * * /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 3 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 6 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 9 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 12 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 15 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 18 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 21 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 24 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 27 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 30 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 33 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 36 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 39 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 42 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 45 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 48 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 51 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 54 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
*/1 * * * * sleep 57 && /usr/local/php/bin/php /usr/local/nginx/www/MemcachedMagent/index.php 172.16.8.81 >/dev/null 2>&1
#-----------------------------------------------------------------
- Linux命令行和shell腳本編程寶典 Richard Blum
- linux c程序中獲取shell腳本輸出的實(shí)現(xiàn)方法
- Linux shell腳本編程if語(yǔ)句的使用方法(條件判斷)
- linux shell腳本學(xué)習(xí)xargs命令使用詳解
- Linux Shell腳本編程的注意事項(xiàng)
- linux下統(tǒng)計(jì)appche站點(diǎn)IP訪問(wèn)量的shell腳本
- Linux中執(zhí)行shell腳本的4種方法總結(jié)
- 阿里云云服務(wù)器Linux系統(tǒng)更新yum源Shell腳本
- 一個(gè)監(jiān)控LINUX目錄和文件變化的Shell腳本分享
- Linux下實(shí)現(xiàn)SSH免密碼登錄和實(shí)現(xiàn)秘鑰的管理、分發(fā)、部署SHELL腳本分享
- Linux Shell腳本編程初體驗(yàn)
- Linux Shell 腳本編程入門(mén)教程
相關(guān)文章
Shell腳本計(jì)算字符串長(zhǎng)度和判斷字符串為空小技巧
這篇文章主要介紹了Shell腳本計(jì)算字符串長(zhǎng)度和判斷字符串為空小技巧,本文分別給出計(jì)算字符串長(zhǎng)度和判斷字符串為空各3種實(shí)現(xiàn)方法,需要的朋友可以參考下2015-04-04Shell腳本自動(dòng)部署項(xiàng)目的方法步驟
本文主要介紹了Shell腳本自動(dòng)部署項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Linux中獲取某個(gè)進(jìn)程的系統(tǒng)調(diào)用以及參數(shù)(故障排查案例)
這篇文章主要介紹了Linux中獲取某個(gè)進(jìn)程的系統(tǒng)調(diào)用以及參數(shù)的方法,總結(jié)自一個(gè)故障排查案例,需要的朋友可以參考下2014-06-06linux shell中實(shí)現(xiàn)循環(huán)日期的實(shí)例代碼
這篇文章主要介紹了linux shell中實(shí)現(xiàn)循環(huán)日期的實(shí)例代碼,文中還給大家提到了LINUX SHELL遍歷日期(指定輸入兩個(gè)日期)的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧2018-09-09Linux命令定位與查找之which、whereis和find的用法示例詳解
Linux命令的定位與查找是我們?nèi)粘9ぷ髦斜貍涞募寄?掌握which、whereis和find這三個(gè)命令,可以幫助我們更加高效地進(jìn)行文件搜索和定位工作,這篇文章主要介紹了Linux命令定位與查找:which、whereis和find的用法詳解,需要的朋友可以參考下2023-10-10Linux中的host命令應(yīng)用實(shí)例詳解
這篇文章主要介紹了Linux中的host命令應(yīng)用舉例的相關(guān)資料,需要的朋友可以參考下2017-07-07linux shell實(shí)現(xiàn)求一個(gè)多維數(shù)組中的最大和最小值
這篇文章主要介紹了linux shell實(shí)現(xiàn)求一個(gè)多維數(shù)組中的最大和最小值,需要的朋友可以參考下2016-08-08