Services
執行一系列程序的守護程序服務(平衡分佈)
我有以下問題。我有一個在後台執行的機器學習過程。更好的是,我有很多(比如說 5 個)要執行它們。它們中的每一個都消耗 CPU 和 GPU 功率,因此希望在特定時間段內(即 1 小時,實際上腳本本身能夠在 1 小時後關閉)只執行其中一個,然後停止它並執行另一個一。這樣,我可以在機器同時執行幾天的同時訓練所有這些人。
挑戰如下:我想讓它們平衡/旋轉。而不是執行第一個,然後是第二個,第三個等。我希望腳本/處理程序確保在第一個執行並且機器重新啟動(或新貴服務重新啟動或類似的東西)之後,然後執行第二個。我想避免每次重新啟動後都以相同的程序開始並且大部分時間花在第一個程序上的情況,最少花在最後一個程序上。
誰能提出一個開箱即用的解決方案(除了編寫我自己的腳本/處理程序,這顯然很容易,但我想要一些經過徹底測試的東西,而不是我自己需要管理的東西)。
這取決於您希望它有多強大。在循環列表中執行“下一個”程序的簡單解決方案可能如下所示:
#! /usr/bin/env bash programs=(program1 program2 program3 program4 program5) state=$HOME/.${0#*/}_state if [ -f "$state" ]; then read idx <"$state" if expr "$idx" : '[0-9][0-9]*$' >/dev/null; then let idx=(idx+1)%${#programs[@]} else let idx=0 fi else let idx=0 fi printf '%d\n' "$idx" >"$state" || exit 1 exec "${programs[$idx]}" "$@"
如果你想要更健壯的東西,你需要鎖定,並且可能將狀態保存在數據庫中。