手把手教我自己熟练地在工作站上丢job - 2020.02.05
这篇blog的核心思想是:怕忘
趁着前一段在家自我封闭,我在组里的工作站上搭建好了需要跑的code,下面好像就可以开始做科研了。但是在正式做事情之前,还要手把手教自己怎么熟练地在工作站上丢job。核心内容只有两个,1. shell script,2. nohup。
Shell script批量作业
我们的目标是用nohup去执行命令,所以我们首先要有事儿干。这个事呢,可以是批量地执行某项命令。比方说,我们尝试写一个简单的可以建立99个文件夹的脚本 - dirs_maker.sh。
for((i=1; i<=99; i++)); do
{
sleep 1
echo "make a directory named dir$i."
mkdir dir$i
echo "done, dir$i."
}
done
不过这样仅通过循环去生成99个文件夹还是有点慢,我们可以利用 & 去让后台并行地执行命令。
for((i=1; i<=99; i++)); do
{
sleep 1
echo "make a directory named $i."
mkdir dir$i
echo "done, dir$i."
} &
done
wait
这样执行命令就快多了。至于说 & 是什么意思,参见shell 管道命令 &、&&、||、>、>>。
nohup
nohup = no hang up
有的时候可能我们要执行的任务有点大,跑起来可能要想当长的时间,但又担心断开ssh链接导致进程中断。这时候nohup命令可以让我们的进程 never hang up。
语法很简单:
nohup Command [Arg ...] [&]
所有输出的内容,都将附加到当前路径下的nohup.out文件中。如果当前路径不可写,则附加到$HOME/nohup.out中。如果你希望在后台运行命令,可以在最后加上一个&。
例子:
nohup sh dirs_maker.sh &
执行完这个例子,你会发现在当前路径下多了99个文件夹以及nohup.out。nohup.out中会是上面那些echo所返回的输出。
然后如果你想知道如何查看/终止在后台运行的命令,可以参看nohup和&后台运行,进程查看及终止。
感觉用top这个命令去查看后台运行的命令更方便一些,退出按q。
References
For how to use nohup
- https://blog.csdn.net/themanofcoding/article/details/81948094
- https://baike.baidu.com/item/nohup/5683841?fr=aladdin
- https://www.cnblogs.com/jinxiao-pu/p/9131057.html#_label0
Fin
到这里,我想对于像我这种菜鸟级的选手就足够了。要是哪天我成长了,再回来添新东西。
Regards,