2013-07-15 11 views
2

我有一個使用Torque/Moab運行的R腳本。但是,掛鐘時間限制比腳本完成所需的時間短得多。由於要解決的問題的性質,腳本不能再平行化。如何在達到掛鐘時限後自動將R腳本重新提交給Torque/Moab? R Torque

我修改了腳本以便在特定時間間隔內對工作區進行備份,並從備份中繼續進行計算。

但是,我需要一個解決方案,只要需要,可以在達到掛鐘時間限制後自動將腳本重新提交給Torque/Moab調度程序。

謝謝。

+0

您可以運行第二個輕量級腳本來監視備份文件夾。當它檢測到一個文件已經被創建時,它會加載備份,然後重新提交腳本返回到Torque/Moab調度器。 –

+0

謝謝。但是,由於此代碼的計算不會線性進行,因此我無法將備份間隔設置得非常接近掛鐘時間限制,否則在某些情況下可能無需進行任何備份即可完成備份。實際上,我將備份間隔設置爲限制值的0.1左右。另請注意,在腳本中有幾個並行進程相對於彼此異步運行,這使得它更加複雜。 – imriss

+0

也許可以查看'python'的'ruffus'包,它可以處理這些東西。您可以使用它來管理您的R會話。 https://code.google.com/p/ruffus/ –

回答

0

您是否有權力增加您的walltime @ submit?如果是這樣,你可以做這樣的事情在你提交的腳本:

#PBS -l walltime='00:00:00:00" #(DD:HH:min:SS)

如果不是我Manetheran同意,你將不得不寫一個小的客戶端檢查。

+0

謝謝。但是,在我的情況下,壁掛限制是48小時。 – imriss

0

標準的事情是做一個提交自身的腳本。這就是所謂的鏈接。作爲一個最基本的bash的例子,假設下面的腳本是/path/to/script.sh和JOB_ID代表指的是您的特定轉矩設定的變量(可能PBS_JOBID?)

#!/bin/bash 
#MSUB OPTIONS... 

#(
#sleep 60 #for example 
msub -l depend=${JOB_ID} /path/to/script.sh > /path/to/next_job.msub 
#)& 

[do hard work here: run your r script, etc.] 

canceljob $(cat /path/to/next_job.msub) 

這裏的關鍵是next_job線,提交新工作(依賴項)只會在當前工作完成時運行(不管它是否正常完成)。如果「艱苦的工作」步驟完成,則取消後續工作。但是,如果「堅硬工作」步驟被掛鐘時間中斷(或出於某種其他原因),則永不會到達canceljob命令,並且最終提交的作業將運行。

我通常會將提交包裝在parens中睡一會兒,然後使用&(即,我取消註釋第4,5和7行)以將該進程與主腳本分離。這樣,如果「努力工作」出現問題並且在第一分鐘左右內失敗,那麼這個過程就會被終止,並且你不會獲得無限的非常短暫的工作鏈。