作者 主題: 求script ,能每隔10秒執行程式?  (閱讀 8891 次)

0 會員 與 1 訪客 正在閱讀本文。

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
求script ,能每隔10秒執行程式?
« 於: 2010-03-24 09:51 »
crontab最低好像只能在每分鐘,所以請問有別的方法?
是不是要採用script的方法?好心人士可以提供範例嗎?

hikohan

  • 俺是博士!
  • *****
  • 文章數: 1288
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #1 於: 2010-03-24 10:00 »
sleep 10
lifeIsFunWithPHP.

夢無痕

  • 懷疑的國中生
  • **
  • 文章數: 50
    • 檢視個人資料
    • 阿榮哥的人~蔘~
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #2 於: 2010-03-24 11:40 »
sleep 不是只是停留而已嗎
我的看法是利用 time=date + %S or %M
再設個判斷給他
case 給他
外層直接給他依個while無限回圈執行
               
~人逢順境不逞強,身處逆境不示弱~
小弟的部落格- http://a-rong-go.blogspot.com/

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #3 於: 2010-03-24 12:04 »
這樣的無限迴圈太吃系統資源了吧?
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

alva

  • 活潑的大學生
  • ***
  • 文章數: 316
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #4 於: 2010-03-24 12:39 »
sleep 好像比較人性點...

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4052
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #5 於: 2010-03-24 12:59 »
sleep 10 為「間隔」10 秒

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

乍看沒啥差別,可是使用 date 檢查,萬一程式執行超過 10 秒就好玩了
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #6 於: 2010-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

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5411
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #7 於: 2010-03-24 14:31 »
其實用 sleep 很難做到精確的隔十秒.... 因為你永遠不知道執行那指令花了多久, 還需要睡多久合起來才是十秒.

這麼短的時間就要做某件事... 可能直接寫個 daemon 來跑會好一些.

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #8 於: 2010-03-24 14:42 »
看樓主對於時間精確的需求...

其實分成兩支script,一支只負責觸發,另一支直接丟到背景執行就返回,那用sleep間隔十秒應該不會差太多(一定不精確的啦)
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

hikohan

  • 俺是博士!
  • *****
  • 文章數: 1288
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #9 於: 2010-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乾吶睡了,沒反應喔。
lifeIsFunWithPHP.

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #10 於: 2010-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

wenlien

  • 憂鬱的高中生
  • ***
  • 文章數: 119
  • 性別: 男
    • 檢視個人資料
    • Open or not open, that is the stupid question.
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #11 於: 2010-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
regards,

Stanley Huang

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #12 於: 2010-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 效能差或系統本就忙
一分鐘累積一個 , 越托越慢後 , 就等比級數增加了

liteC

  • 憂鬱的高中生
  • ***
  • 文章數: 158
    • 檢視個人資料
    • 軟體
回覆: 求script ,能每隔10秒執行程式?
« 回覆 #13 於: 2010-03-25 13:13 »
簡單的想, 就每分鐘觸發一支script

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

不用想的太複雜
非常謝謝學長們熱心回答我發問的問題
非常感寫 m(_ _)m