歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

利用crond實現秒級執行的辦法

昨天在設置網站目錄的安全時候,為了安全方面的考慮需要將某個目錄下的文件3秒清空一次,第一反應是通過cron來解決,可crontab似乎只支持到分,怎麼辦呢?經過一番努力,終於解決了,分享一下方法,希望幫助到有類似需求的同學。   小編在這裡先簡單介紹下cron是個什麼東西。   crontab命令常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。該命令從標准輸入設備讀取指令,並將其存放於“crontab”文件中,以供之後讀取和執行。以下是這個命令的一些參數與說明:     crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數    crontab -l //列出某個用戶cron服務的詳細內容    crontab -r //刪除沒個用戶的cron服務    crontab -e //編輯某個用戶的cron服務    # 配置文件格式說明 # ——分鐘 (0 – 59)  # | ——小時 (0 – 23)  # | | ——日 (1 – 31)  # | | | ——月 (1 – 12)  # | | | | ——星期 (0 – 7)(星期日=0或7) # | | | | |  # * * * * * 被執行的命令   通過配置文件我們也能發現,cron最多只可以設置到分鐘。那我們的需求是每秒,那應該如何解決呢?   第一種方法:   當然首先想到的是寫一個觸發的腳本,在觸發腳本中使用死循環來解決此問題,如下:   cat kick.sh 
#!/bin/bash
while : ;do
        /home/somedir/scripts.sh 2>/dev/null &
        sleep 3
done
注意:第一次運行時請不要使用bash kick.sh & 這種後台運行的方式,它會僵死的。  可以把它放到計劃任務使其運行,然後將計劃任務中的此條目刪除即可。最後把這個腳本放到/etc/rc.local讓它每次開機都可以被運行。   第二種方法:   和第一種方法類似,只不過感覺比第一種更便捷一些。     cat cron-seconds.sh   
#!/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
  然後寫入的crontab裡每分鐘執行一次,如下     crontab -e    * * * * * /bin/bash /home/somedir/cron-seconds.sh      第三種方法:   那麼如何使用計劃任務來直接實現呢?  最後解決方案如下,經驗證,腳本運行非常穩定。(腳本作者:findingcc)   crontab -e     
## For excuting scripts.sh every 3 seconds##on 2010-01-22
* * * * *  /home/somedir/scripts.sh
* * * * * sleep 3 &&  /home/somedir/scripts.sh
* * * * * sleep 6 &&  /home/somedir/scripts.sh
* * * * * sleep 9 &&  /home/somedir/scripts.sh
* * * * * sleep 12 &&  /home/somedir/scripts.sh
* * * * * sleep 15 &&  /home/somedir/scripts.sh
* * * * * sleep 18 &&  /home/somedir/scripts.sh
* * * * * sleep 21 &&  /home/somedir/scripts.sh
* * * * * sleep 24 &&  /home/somedir/scripts.sh
* * * * * sleep 27 &&  /home/somedir/scripts.sh
* * * * * sleep 30 &&  /home/somedir/scripts.sh
* * * * * sleep 33 &&  /home/somedir/scripts.sh
* * * * * sleep 36 &&  /home/somedir/scripts.sh
* * * * * sleep 39 &&  /home/somedir/scripts.sh
* * * * * sleep 42 &&  /home/somedir/scripts.sh
* * * * * sleep 45 &&  /home/somedir/scripts.sh
* * * * * sleep 48 &&  /home/somedir/scripts.sh
* * * * * sleep 51 &&  /home/somedir/scripts.sh
* * * * * sleep 54 &&  /home/somedir/scripts.sh
* * * * * sleep 57 &&  /home/somedir/scripts.sh

 

這裡的 sleep 57 &&  /home/somedir/scripts.sh   是個完整的命令,假如我們要清空/home/91ri.org/log/ 下方的文件 我們可以這樣: * * * * * sleep 3 && rm /home/91ri.org/log/* * * * * * sleep 6 && rm /home/91ri.org/log/* * * * * * sleep 9 && rm /home/91ri.org/log/*   以此類推   那麼我還是比較傾向於使用第三種方法的,雖然比較麻煩一點。因為第一種方法和第二種方法並不是嚴格的間隔3秒執行的,會大於3秒,因為執行腳本scripts.sh也是需要一定時間的,即使已經加了&符號放到了後台執行也會存在一定的誤差。如果對於精確度要求不高,推薦使用第二種方法。   [附錄]   網絡上還有這麼一種寫法: *:10 * * * * rm /home/91ri.org/log/*   意為:每10秒執行一次rm /home/91ri.org/log/* 但不知是否是小編個人的問題還是這個命令本身是錯誤的,經過在centos下測試後,這個是不可以的。那麼有興趣的同學可以自行測試。   cron的相關使用文章參考《利用cron做linux rsync+ssh 鏡像備份》     from:www.91ri.org
Copyright © Linux教程網 All Rights Reserved