2013-06-01 143 views
2

需要在隨機時間每天運行一次shell腳本。 (所以每天在00:00-23:59之間進行一次)。隨機時間每天運行一次shell腳本

我知道sleep命令和cron太多,但

  • cron有沒有隨機時間
  • sleep解決方案 - 不是很好 - 我的想法是啓動腳本每個午夜睡覺隨機時間在腳本的開始處。

這裏是更優雅的東西嗎?

回答

4

cron最好的選擇可能是at

通常,at從標準讀取命令輸入,但您可以輸入-f的作業文件。

明智的是,您可以指定多種格式。也許在你的情況下,最方便的是

  • at -f jobs now + xxx minutes

了您的腳本給XXX從11440一個隨機值(1440分鐘,每天),而且jobs包含所需命令被執行。

1

您可以使用cron來啓動bash腳本,它產生僞隨機時間戳和它給UNIX程序at

我看到你熟悉的bash和cron不夠,所以at將是一塊蛋糕給你的。文檔一如既往 「男人」 或者你可以嘗試維基

http://en.wikipedia.org/wiki/At_(Unix)

10

如果您有at命令,則可以合併cronat。從cron每到半夜,下一個腳本

運行:

#!/bin/bash 
script="/tmp/script.sh"  #insert the path to your script here 
min=$((24 * 60)) 
rmin=$(($RANDOM % $min)) 
at -f "$script" now+${rmin}min 

以上將運行at命令每一個午夜,並會在隨機時間執行腳本。您應該檢查您的crontab atrun命令的啓動頻率。 (atrun運行與at一起存儲的命令)

sleep方法相比的主要優點:此「存活」系統重新啓動。

1

沒有什麼能阻止你運行sed來修補你的crontab作爲你的程序所做的最後一件事,並且改變下一個開始時間。儘管如此,我還是睡不好。

4

我只是簡單地在午夜啓動腳本,而sleep隨機時間在0到86400秒之間。由於我的bash的$RANDOM返回0到32767之間的數字:

sleep $((($RANDOM % 1440)*60 + ($RANDOM % 60)))