如何讓Linux定時任務crond以秒爲單位執行(如每隔3秒)php
須要用到Shell腳本每隔3秒鐘去監控一個軟件進程的運行狀態,發現crond彷佛只支持到分,不知道秒,怎麼辦呢?nginx
第一種方法:bash
固然首先想到的是寫一個觸發的腳本,在觸發腳本中使用死循環來解決此問題,以下:服務器
cat kick.sh代理
1進程
#!/bin/bashcrontab
2ip
while : ;do後臺
3監控
/home/somedir/scripts.sh 2>/dev/null &
4
sleep 3
5
done
注意第一次運行時請不要使用 bash kick.sh & 這種後臺運行的方式,它會僵死的。
能夠把它放到計劃任務使其運行,而後將計劃任務中的此條目刪除便可。最後把這個腳本放到 /etc/rc.local 讓它每次開機均可以被運行。
第二種方法:
和第一種方法相似,只不過感受比第一種更便捷一些。
cat cron-seconds.sh
1
#!/bin/bash
2
#For excuting the scripts every 3 seconds in crond.
3
#20100124.WXG
4
5
for((i=1;i<=20;i++));do
6
7
/home/somedir/scripts.sh 2>/dev/null &
8
sleep 3
9
done
而後寫入的crontab裏每分鐘執行一次,以下
crontab -e
1
* * * * * /bin/bash /home/somedir/cron-seconds.sh
第三種方法:
那麼如何使用計劃任務來直接實現呢?
最後解決方案以下,經驗證,腳本運行很是穩定。
crontab -e
01
## For excuting scripts.sh every 3 seconds##on 2014-10-15
02
*/1 * * * * /home/somedir/scripts.sh
03
*/1 * * * * sleep 3 && /home/somedir/scripts.sh
04
*/1 * * * * sleep 6 && /home/somedir/scripts.sh
05
*/1 * * * * sleep 9 && /home/somedir/scripts.sh
06
*/1 * * * * sleep 12 && /home/somedir/scripts.sh
07
*/1 * * * * sleep 15 && /home/somedir/scripts.sh
08
*/1 * * * * sleep 18 && /home/somedir/scripts.sh
09
*/1 * * * * sleep 21 && /home/somedir/scripts.sh
10
*/1 * * * * sleep 24 && /home/somedir/scripts.sh
11
*/1 * * * * sleep 27 && /home/somedir/scripts.sh
12
*/1 * * * * sleep 30 && /home/somedir/scripts.sh
13
*/1 * * * * sleep 33 && /home/somedir/scripts.sh
14
*/1 * * * * sleep 36 && /home/somedir/scripts.sh
15
*/1 * * * * sleep 39 && /home/somedir/scripts.sh
16
*/1 * * * * sleep 42 && /home/somedir/scripts.sh
17
*/1 * * * * sleep 45 && /home/somedir/scripts.sh
18
*/1 * * * * sleep 48 && /home/somedir/scripts.sh
19
*/1 * * * * sleep 51 && /home/somedir/scripts.sh
20
*/1 * * * * sleep 54 && /home/somedir/scripts.sh
21
*/1 * * * * sleep 57 && /home/somedir/scripts.sh
22
#-----------------------------------------------------------------
他的思路是:先每隔1秒鐘觸發定時任務,而後又休眠 3秒、6秒、9秒等間隔 來執行具體的Shell腳本。
我仍是比較傾向於使用第三種方法的。由於第一種方法和第二種方法並非嚴格的間隔3秒執行的,會大於3秒,由於執行scripts.sh也是須要必定時間的,即便已經加了&符號放到了後臺執行也會存在必定的偏差。若是對於精確度要求不高,推薦使用第二種方法。
工做中的一次用 PHP腳本每隔3秒鐘去監控一個Memcached代理服務器Magent的運行狀態
crontab -e
#-----------------------------------------------------------------
*/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
#-----------------------------------------------------------------