OpenFOAM的程序运算周期往往很长,动辄数百万步的时间步长,往往要运算几天甚至数个星期,这对计算机性能是一个极大的挑战。一般的计算机并不足以满足计算要求,通常需要租用大型工作站或服务器,这就涉及到远程连接的问题。这里,我们一般采用后台运行。其好处是:
- 在连接远程服务器时,我们这边一旦断网或者关机,就会导致程序运行终止,跑了几天的工作量付之流水,让人的心情蒙上一层阴影,后台处理可以很大程度上避免这一点;
- 不会影响计算效率,而且不会占用终端,我们可以使用终端继续别的事情。
1.后台运行指令
1.1 & 指令
我们可以直接在终端输入求解器名称&
进行后台运行,如:
icoFoam &
paraview &
上述命令并不能保证用户关闭终端之后程序继续运行,因而,引入如下指令:
1.2 nohup 指令
nohup icoFoam &
nohup
全称no hang out
,不间断执行命令,求解器运行的信息,将保存在当前目录下的nohup.out
中。如果当前目录的 nohup.out
文件不可写,输出重定向到 $HOME/nohup.out
文件中。
我们还可以使用> log
命令进行文件的重定向输出,如:
nohup icoFoam > log //关闭标准输入,终端不再能够接收任何输入(标准输入)
nohup icoFoam > log &//关闭标准输入,终端能够接收任何输入
cat命令可以将输出的log文件再此显示到终端上:
cat log
注意:有时候,使用nohup & 命令关闭中端后程序仍会终止。为避免这种情况,在shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端。
2. 查看后台执行的任务
jobs
:查看当前终端后台执行的任务
jobs -l
当终端关闭,启用新的终端后,jobs -l
无法再查询后台所执行的任务,此时,需要使用 ps
指令:
ps -aux|grep
:查询当前执行任务
[student2@node01 ~]$ ps -aux|grep mpirun
student2 112974 0.5 0.0 146928 5960 ? Sl 9月20 6:01 mpirun -np 4 interFoam -parallel
student2 115000 0.5 0.0 146928 5916 ? Sl 9月20 6:14 mpirun -np 4 interFoam -parallel
student2 116012 0.5 0.0 146928 5956 ? Sl 9月20 5:52 mpirun -np 4 interFoam -parallel
student2 116999 0.5 0.0 146928 5888 ? Sl 9月20 6:12 mpirun -np 4 interFoam -parallel
[student2@node01 ~]$
a
: 显示所有程序;
u
: 以用户为主的格式来显示 ;
x
: 显示所有程序,不以终端机来区分。
3. 关闭后台执行的任务
kill
指令—强制中断当前任务
kill -9 任务进程号//进程号为 112974、115000、116012、116999
4. 读取 nohup.out 文件
生成的nohup.out
或者log
文件往往很大,用一般的方法读取十分困难(我曾用记事本试图打开一个500M的文件,结果失败了)。这时,我们可以使用以下命令:
tail nohup.out
tail log
上述命令默认输出文件的后十行,我们可以通过以下命令指定输出行数:
tail -n 200 log//将`tail`替换为`head`可以输出log文件的前 n 行。
我们也可以通过Xftp将文件下载到windowns
主机查看。对于这种大型文件推荐使用UltraEdit
进行打开。
5. 清空 nohup.out(转储)
nohup.out
文件所占用的内存往往很大,如果服务器硬盘存储空间不足,很容易把程序进程终止。以下命令可以查询内存空间:
df -h
如果内存空间不足,我们就需要删除 nohup.out
文件。但又不能直接删除,否则可能会造成应用无法打印后续的错误日志。对此,可以采用不停止服务,直接清空nohup.out
文件的方法:
第一种:cp /dev/null nohup.out
第二种:cat /dev/null > nohup.out
关于/dev/null文件
Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
------摘自引文4第四部分
我们也可以通过以下方法重定向nohup.out文件,解决nohup.out文件过大的问题:
//只输出错误信息到日志文件
nohup command >/dev/null 2>log &
//什么信息也不要
nohup command >/dev/null 2>&1 &
//2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到log文件中。
nohup command > log 2>&1 &
其中,
0 – stdin (standard input)//标准输入
1 – stdout (standard output)//标准输出,在一般使用时,默认的是标准输出
2 – stderr (standard error) //标准错误信息输出
引文:
- https://blog.csdn.net/CloudBird07/article/details/105316298
- https://blog.csdn.net/DN_XIAOXIAO/article/details/78322847
- https://baike.baidu.com/item/nohup/5683841?fr=aladdin
- https://blog.csdn.net/qq_29663071/article/details/81030396?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare
- https://blog.csdn.net/hanbingchegu/article/details/108341254