酷!學園

技術討論區 => Linux 討論版 => 主題作者是: NARs 於 2010-03-24 09:51

主題: 求script ,能每隔10秒執行程式?
作者: NARs2010-03-24 09:51
crontab最低好像只能在每分鐘,所以請問有別的方法?
是不是要採用script的方法?好心人士可以提供範例嗎?
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: hikohan2010-03-24 10:00
sleep 10
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: 夢無痕2010-03-24 11:40
sleep 不是只是停留而已嗎
我的看法是利用 time=date + %S or %M
再設個判斷給他
case 給他
外層直接給他依個while無限回圈執行
               
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: fillano2010-03-24 12:04
這樣的無限迴圈太吃系統資源了吧?
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: alva2010-03-24 12:39
sleep 好像比較人性點...
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: hoyo2010-03-24 12:59
sleep 10 為「間隔」10 秒

檢查 date 則是「每到」10 20 30 ... 秒就執行一下

乍看沒啥差別,可是使用 date 檢查,萬一程式執行超過 10 秒就好玩了
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: dark2010-03-24 13:56
樓主似乎較少接觸 linux
但會 php ..

代碼: [選擇]
#!/usr/bin/php
<?
while (true){
system("echo ya");
sleep(10);
}
?>

代碼: [選擇]
#!/bin/bash
while true;do
echo ya
sleep 10
done
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: twu22010-03-24 14:31
其實用 sleep 很難做到精確的隔十秒.... 因為你永遠不知道執行那指令花了多久, 還需要睡多久合起來才是十秒.

這麼短的時間就要做某件事... 可能直接寫個 daemon 來跑會好一些.
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: fillano2010-03-24 14:42
看樓主對於時間精確的需求...

其實分成兩支script,一支只負責觸發,另一支直接丟到背景執行就返回,那用sleep間隔十秒應該不會差太多(一定不精確的啦)
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: hikohan2010-03-24 15:07
樓上各位的答案都很讚。

每相隔10秒整發射,就是

00.000 s
10.000 s
20.000 s
30.000 s
40.000 s
50.000 s

誤差都必須在 0.01秒以內發射,那就要用 daemon 搞,缺點就是系統資源損耗高。

相對地,睡一下,大概睡一下,不求極微精準,打個盹也不錯啦。

LZ乾吶睡了,沒反應喔。
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: thyme2010-03-24 15:49
以下沒有實際執行過
#!/bin/bash
your_pid=0
next_timet=0
while [ 1 ];
do
#每次拿系統時間,才不會有累積誤差
  now_timet=$(date "+%s")
  if [ "$your_pid" = "0" ]; then
#第一次直接跑程式
    next_timet=$(($now_timet + 10))
    your.sh &
    your_pid=$!
#把pid存起來
    echo $your_pid > /tmp/your.pid
    sleep 1
    continue
  fi
#檢查目前程式有沒有在跑
  kill -0 $your_pid
  if [ $? -ne 0 ] && [ $now_timet -ge $next_timet ]; then
#程式沒有在跑,且到了下次該跑的時間
#下次要跑的時間定在10秒後
    next_timet=$(($now_timet + 10))
    your.sh &
    your_pid=$!
    echo $your_pid > /tmp/your.pid
  elif [ $now_timet -ge $next_timet ]; then
#程式仍在跑,忽略這一次吧
    next_timet=$(($now_timet + 10))
  fi 
#每秒檢查一次,誤差在一秒內
  sleep 1
done
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: wenlien2010-03-24 22:51
crontab最低好像只能在每分鐘,所以請問有別的方法?
是不是要採用script的方法?好心人士可以提供範例嗎?

想太多對身體不好, 簡單點~

# crontab -e
[加一行]
* * * * * for i in 1 2 3 4 5 6 do; /bin/run_your_program ; sleep 10 ; done
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: dark2010-03-25 01:40
crontab最低好像只能在每分鐘,所以請問有別的方法?
是不是要採用script的方法?好心人士可以提供範例嗎?

想太多對身體不好, 簡單點~

# crontab -e
[加一行]
* * * * * for i in 1 2 3 4 5 6 do; /bin/run_your_program ; sleep 10 ; done

若這麼使用 , 仍建議用 thyme 提供的 script
無窮迴圈改成 6 次迴圈 ...

若無 daemon 監控 , 便有重複執行的機率
且不說該需求是否允許重複執行
... 若 cpu 效能差或系統本就忙
一分鐘累積一個 , 越托越慢後 , 就等比級數增加了
主題: 回覆: 求script ,能每隔10秒執行程式?
作者: liteC2010-03-25 13:13
簡單的想, 就每分鐘觸發一支script

script 內用 sleep 迴圈6次就解決了

不用想的太複雜