Learn VASP The Hard Way (Ex-XX)通过job-ID快速进入计算目录

2018-02-19


Ex-XX 通过Job-ID快速进入计算目录

 



大家都知道,VASP的每一个计算都在一个单独的文件夹里进行。随着课题的进行,我们也会建越来越多的目录。从而导致我们在查看任务的时候,需要频繁地输入cd命令,不停地使用tab 补全路径,然后在不同的计算目录下切换。这一方面导致我们浪费了很多时间在敲命令上,另一方面加重我们的双手负担,有助于键盘手的养成。

 

那么我们可不可以快速进入计算的目录呢?

答:当然可以。下面,大师兄们就带领你一步一步学会如何根据任务的ID快速进入计算目录。

 



首先,我们先思考一下进入目录的过程:

1)  获取目录的路径

2)  使用cd这个命令进入

 



知道原理之后,我们便可以把这个问题分成两部分来解决。

 

第一步,先根据job-ID获取目录,一般来说,不同的课题组都有不同的任务提交系统,但总而言之,不管什么样的任务提交方式,都会有一些相应的命令来查看你的任务情况。

例子1)我们的服务器上可以使用: qstat -j job-ID 来查看任务详情。见下图:

 

 

方框里面便是我们任务的目录,我们可以使用grep 和 awk 命令来获得,如下



 

例子2)本人在超算中心查看任务的时候,需要用到 scontrol show job job-ID来查看任务信息,获取目录的示意图如下:

 


通过前面的例子,获取目录的工作顺利完成。



 

第二步:进入目录


获得了目录之后,直接用cd 这个命令进入就可以了。我们的脚本可以写成这样的:

 

 

保存脚本,名字为 ent.sh 。 然后运行,效果如下:

 

 

从上图可以看到,运行脚本后,我们并没有进入到计算的目录下,而是原封不动地待在原地。




这是为什么呢? 大师兄群里(217821116)的牛牛们给出了答案。

 

1) 首先我们先看下到底有没有进入计算的目录(小亮的测试结果),原理如下:

A) 在Desktop目录下,写一个test1.sh 的脚本

B) 在Desktop目录下,建一个test的文件夹,

C) 在Desktop/test目录下,写一个test2.sh 的脚本。

D) test1.sh的功能是 进入 test 目录,然后运行该目录下的 test2.sh脚本,test2.sh的功能是输出 lalala这几个字母。

E) 我们在Desktop目录下运行test1.sh: 也就是进入test这个目录,然后运行test2.sh

如果我们得到了 lalala 这样的输出,就意味着我们已经进入test,并且成功运行了test2.sh 这个脚本。

F)  脚本具体内容及运行结果如下图:



 

测试结果表明我们确实进入了test这个目录。但为什么我们最终又返回来原来的目录了呢? 这是因为直接用bash的话,是开始了一个子进程,并不会改变父进程的目录。(小亮的话,原封不动地就贴出来了)但我们做化学的,大部分都知道紫禁城,但不知道啥是子进程啊,当然也不知道父进程是啥玩意。

 



这个问题先放一边,那么我们应该怎么解决这问题呢?毕竟,我们需要的就是通过脚本进入目录而已。小亮同学给出了答案。



 

我们可以使用source 或者 . 后面加脚本来实现这个功能。 为啥source 和 . 可以呢?

首先,在linux下面,source 和 . 是一样的。

其次,群里的赵老师解释说: 若用source命令,就会不开启子进程。

又是紫禁城,虽然不知道是啥,但我们现在可以得出这样的结论,使用source或者.是可以解决这个问题的。

 



我们尝试一下:

 

 

果不其然,大牛们的方法就是好用。(100个赞!)

 



第三步:脚本改进


上图中,脚本里面我们放的是一个任务的ID,但想查看任意的一个任务,就需要把图中的job-ID (1209653)改成 $1 即可。 $1 代表的是脚本后面紧跟的第一个参数。效果如下:

 

 

哈哈,这样的话,我们每次运行: source ~/bin/ent.sh job-ID 即可进入计算的目录。

这里之所以使用 ~/bin/ent.sh 是因为脚本在~/bin目录下面。前面我们都是在~/bin目录下运行的,但如果你在目录1(非 ~/bin)下写的脚本,然后再目录2下运行source ent.sh 的话,系统可能找不到ent.sh 文件,从而导致出错。 如果不想每次都输入这么长的命令,可以修改~/.bashrc 文件,添加如下内容: alias e6='source ~/bin/ent.sh'

 

 

注意: 等号=前后没有空格。

这样,每次我们输入 e6 job-ID 就可以自动进入计算目录了。大功告成。

 



小结:

 

根据job-ID快速进入计算任务的原理:

1)  通过ID找到任务的路径,

2)  使用source来实现 cd 的效果。

脚本很简单,内容只有2行,但背后所隐藏的原理,出现的问题,以及解决问题的方法,这才是我们所需要真正掌握的。

 

再次感谢群里的小亮和赵老师对紫禁城问题的指导。祝大家根据自己的情况,顺利写出脚本并使用愉快。


本网站由阿里云提供云计算及安全服务