Friday, October 31, 2014

[Torque] 讓node重開機後, 不會重跑job的方法

正常來說, 如果一個node跑job跑到一半重新開機的話, 下一次與server連線後, server會要求node重新跑這些job.
但是在某些情形下, 這樣反而會造成不想要的效果, 例如某個把記憶體吃光的job又重新跑, 然後又再當機一次...
或是使用者可以用跑一半的資料接續下去使用, 但是job自動重跑的話, 跑一半的資料反而被洗掉等等.

關鍵點是node上的pbs_mom, 遇到重新啟動時的行為.
預設值的話, mom要真的把job跑完, 才會回報job結束.
但是這個行為可以改, 說明在這裡:
(http://docs.adaptivecomputing.com/torque/4-1-7/help.htm#topics/12-appendices/commandLineArguments.htm)
這裡可以看到幾個相關參數:

p: mom重啟的話, 先查詢跑一半job的相關行程是不是還在跑. 如果行程已經死掉, 那就中斷job, 如果還在跑的話就放著繼續跑.
P: 重起的話, 無條件刪除原本跑一半的job, 注意是大寫P
q: 中斷跑一半job的process, 然後重跑job (這是預設值)
r: 不中斷跑一半job的process, 讓job繼續跑

這樣來看的話, p是最安全的選擇:  如果只是mom重啟, 機器沒當機, mom連線之後job會繼續執行; 如果當機後重開的話, 既然job的行程已經不在, mom連線後會把job刪掉.

在最前面提到的情形中, 我不想要讓job在重開機後重送, 所以應該選用p.
反應快的話應該已經想到, 這應該要去修改pbs_mom的服務設定檔!

以CentOS 5 + Torque 3.0.6版來說, 這檔案在/etc/init.d/pbs_mom
在24行的地方, 控制了服務啟動時使用的這個參數, 可以看到預設是寫 "$args -q".
所以只要改成 "$args -p", 重啟一次pbs_mom服務, 以後如果當機重開, job就不會重跑了.

No comments: