假设我在目录中有以下文档,
> dir()
# [1] "master.job" "master.R" "P1.job" "P2.job" "P1.R" "P2.R"
master.job
提交给pbs来排序master.R
,P1.job
到源P1.R
,P2.job
到源P2.R
等...源master.R
会不时创建新的Px.job
和Px.R
,并提交使用命令(在R中)system("qsub Px.job")
创建的新作业。 master.R
充当顶层监视过程,并确定何时创建和提交新作业。
使用SSH连接到群集时,我可以简单地在控制台中调用R,然后使用以下命令:
> source("master.R")
该过程运行没有问题。但是通过这种方式,我将不得不保持自己的PC处于打开状态,因为一旦断开与服务器的连接,该进程将被终止。因此,出于我的目的,我需要将作业master.job
提交给pbs。但是,当我这样做时,到达步骤system("qsub Px.job")
时遇到以下错误:
socket_connect_unix失败:15137
qsub:无法连接到服务器(空)(errno = 15137)无法连接到trqauthd
有什么建议吗?很明显,我可以通过R控制台(system("qsub Px.job")
或source("master.R")
)提交作业,但是为什么不能通过另一个R提交相同的作业(Px.job
)呢?进程(master.R
被提交的作业(master.job
)调用时?
我很确定有人会问为什么我需要做这样的事情。
开始时,我只有一份工作要提交:P.job
,该工作源于P.R
。 P.R
是可重复调用另一个专有程序X的源代码。程序X有一个错误,在当前版本中未解决,该错误会在某些时候永久冻结 。冻结后,P.R
将无法检测到(我也无法对程序X进行任何更改)。因此,我需要向pbs提交另一个单独的独立进程,该进程可以(1)在特定的磁盘I / O时终止(使用qdel
)已提交的作业P.job
(并因此杀死P.R
)。目录在特定时间内不存在,(2)检查进度,并且(3)根据进度重新提交另一个P.job
(源另一个P.R
)。