Linux的 cron 計劃任務最短間隔只有一分鐘,在一些要求下,需要計劃任務腳本以秒級別的間隔運行,比如一些隊列處理程序,狀態檢測程序等等。
這個使用shell 的 while, sleep 即可實現,實際就是形成一個死循環,反復執行指定的流程。如果要退出這個程序,直接殺死進程即可。但是我見過一些人寫的腳本,沒有考慮到腳本意外被中斷時的恢復問題,或單實例問題(即此任務只能運行一次),經過總結,我整理了本文代碼,以供參考,實現的特性:
1. 自定義運行間隔
2. 單實例(只能運行一次,多次運行是無效的)
3. 信號處理(可接收普通的進程控制信號)
second-cron.sh的內容:
#!/bin/bash
interval=5
single_instance=y
pidfile=/var/lock/subsys/`basename $0`.pid
if [ "$single_instance" == "y" ] ; then
if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then
exit 1
fi
fi
trap "rm -fr $pidfile ; exit 0" 1 2 3 15
echo $$ > $pidfile
function process() {
echo "process ..." > /dev/null
}
while [ 1 ]
do
process
sleep $interval
done
內容非常簡單,請根據具體需要修改文件名稱,interval, single_instance 幾項參數。 process 函數中的處理流程請自行根據需要完善即可。
如果要避免此腳本意外退出後能自行恢復,請在cron 計劃任務中添加:
*/1 * * * * /root/second-cron.sh
源代碼下載
下載在Linux公社的1號FTP服務器裡,下載地址:
FTP地址:ftp://www.linuxidc.com
用戶名:www.linuxidc.com
密碼:www.muu.cc
在 2012年LinuxIDC.com\8月\Linux秒級間隔的計劃任務腳本
下載方法見 http://www.linuxidc.net/thread-1187-1-1.html
如此,即使當前腳本意外中斷退出,也能自行恢復,一定程度上保證了可靠性。