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

2022-09-22 23:00:31 字數 3277 閱讀 9809

昨天在設定**目錄的安全時候,為了安全方面的考慮需要將某個目錄下的檔案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下測試後,這個是不可以的。那麼有興趣的同學可以自行測試。

from:www.91ri.org

如何利用crond實現秒級定時任務?

1.問題引出 crond實現定時任務的思路 crond服務預設情況每分鐘檢查系統中是否有需要執行的定時任務,如果有,就會根據事先定義好的規則來執行這個定時任務,而crond配置的書寫語法中 command 最低的時間單位是分鐘,所以說,乙個crond定時任務最多只能執行分鐘級的定時任務,這是顯然的!...

linux 實現秒級執行定時任務

前言 總所周知,linux的crontab定時任務最高只能執行到分鐘級別,每分鐘進行執行指定指令碼。但是,有很多時候我們進行統計操作的時候,需要執行的頻率比較高,達到秒級。接下來,整理下秒級的定時任務的開啟 1 進入定時任務管理編輯頁面 crontab e 2 新增新的任務 wen.sh為需要執行的...

實現秒級作業的示例 使用WAITFOR sql

use tempdb if exists select from msdb.dbo.sysjobs where name 20秒一次的作業 exec msdb.dbo.sp delete job job name 20秒一次的作業 定義建立作業 declare jobid uniqueidentif...