你說的是這個運行幾個星期吧?所以,我們必須考慮到系統將被重新啓動,並且需要無人值守地運行。總之,即使在周圍沒有人的情況下,您也需要一些方法確保腳本每週至少運行一次。該方案是這樣的
選項1(最差)
您設定提醒自己,你每次登錄的一週並運行該腳本。雖然你可能是一個可靠的人,但這不允許你去度假。此外,這違背了我們「無人居住」的原則。
選項2(好)
您可以後臺進程(./once-a-week.sh &
),但這將不可靠的一段時間。除此之外,如果系統重新啓動,那麼你的腳本將不會運行,你不會知道。
選項3(更好)
對於這個可靠數週一個選項是守護進程的腳本。有關此事的更詳細討論,請參閱:Best way to make a shell script daemon?
您需要確保守護程序在重新引導或系統故障後啓動。有關此事的更多討論,請參見:Make daemon start up with Linux
選項4(最好)
你說沒有cron
但它確實是最好的選擇。特別是,在不需要運行的情況下,6天,23小時和59分鐘不會消耗系統資源。另外,它自然可以重新啓動等。所以,我不得不說,創建類似下面的crontab條目將是我的最高票:@weekly /full/path/to/script
如果您選擇選項2或以上3,您需要修改您的腳本包含其中腳本上次成功完成其運行的星期編號變量(date +%V
)。問題是,只有在內存中意味着它不會在重新啓動後保持。
爲了使上述任何一項更具彈性,最好創建一個可存儲文件的目錄作爲信號量(例如week21.txt
)或存儲上次運行狀態的文件。像once-a-week.state
的東西,你會寫一個值運行時:
date +%V > once-a-week.state # write the week number to a file
然後讀取值,你會:
file="/path/to/once-a-week.state" # the file where the week number is stored
read -d $'\x04' name < "$file"
echo "$name"
然後,您需要檢查,看看是否週數匹配這個目前的週數,並根據是否匹配處理所需的操作。
'cron'可能是一個很好的開始。 – Jakuje
爲什麼不使用cron?它的設計正是爲了這個目的:編寫你想要的任何腳本,並讓cron負責執行它的調度。 –
我真的對你爲什麼不能使用cron感興趣? – Harry