需要在隨機時間每天運行一次shell腳本。 (所以每天在00:00-23:59之間進行一次)。隨機時間每天運行一次shell腳本
我知道sleep
命令和cron
太多,但
- 的
cron
有沒有隨機時間 - 和
sleep
解決方案 - 不是很好 - 我的想法是啓動腳本每個午夜睡覺隨機時間在腳本的開始處。
這裏是更優雅的東西嗎?
需要在隨機時間每天運行一次shell腳本。 (所以每天在00:00-23:59之間進行一次)。隨機時間每天運行一次shell腳本
我知道sleep
命令和cron
太多,但
cron
有沒有隨機時間sleep
解決方案 - 不是很好 - 我的想法是啓動腳本每個午夜睡覺隨機時間在腳本的開始處。這裏是更優雅的東西嗎?
至cron
最好的選擇可能是at
通常,at
從標準讀取命令輸入,但您可以輸入-f
的作業文件。
明智的是,您可以指定多種格式。也許在你的情況下,最方便的是
at -f jobs now + xxx minutes
了您的腳本給XXX從1
到1440
一個隨機值(1440分鐘,每天),而且jobs
包含所需命令被執行。
您可以使用cron來啓動bash腳本,它產生僞隨機時間戳和它給UNIX程序at
我看到你熟悉的bash和cron不夠,所以at
將是一塊蛋糕給你的。文檔一如既往 「男人」 或者你可以嘗試維基
如果您有at
命令,則可以合併cron
和at
。從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
方法相比的主要優點:此「存活」系統重新啓動。
沒有什麼能阻止你運行sed來修補你的crontab作爲你的程序所做的最後一件事,並且改變下一個開始時間。儘管如此,我還是睡不好。
我只是簡單地在午夜啓動腳本,而sleep
隨機時間在0到86400秒之間。由於我的bash的$RANDOM
返回0到32767之間的數字:
sleep $((($RANDOM % 1440)*60 + ($RANDOM % 60)))