我有一个调用英特尔可移植性功能'系统'的功能:
subroutine system_subr(JobString,ExitStatus)
implicit none
character(len=*),intent(in) :: JobString
integer,intent(out) :: ExitStatus
integer shiftr,system
ExitStatus=system(JobString)
end subroutine system_subr
我的程序正在执行以下操作:
call system_subr('mv myfile newfilename', status)
call system_subr(submitjobstring, status)
第二次调用中的copy命令是通过ssh完成的 - 一个示例submitjobstring(父作业在/ sharedscratch / user / test中运行)将是:
ssh node1 " mkdir -p /scratch/user/9570.0.70468 ; cd /sharedscratch/user/test/ ; cp -r newfilename otherfile /scratch/user/9570.0.70468 ;
这段代码多年来一直没有问题。但是,在我们的新计算群集中,这大部分时间都在工作,但偶尔会遇到问题。
我有时得到的错误是:
cp: cannot stat ‘newfilename’: No such file or directory
如果我查看/scratch/user/9570.0.70468/,其他文件(在程序启动之前创建)已经复制到那里,但是newfilename没有。我还发现newfilename确实存在于/ sharedscratch / user / test中。如果我在第一次调用system_subr时检查退出状态,则它始终为0.
如果我在两次调用system_subr之间放入一个sleep命令,它似乎总能正常工作。在继续之前,系统是否正在等待mv命令完成?我真的很想知道为什么会这样。