OpenFOAM后台运行程序以及nohup命令

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   920   6:01 mpirun -np 4 interFoam -parallel
student2 115000  0.5  0.0 146928  5916 ?        Sl   920   6:14 mpirun -np 4 interFoam -parallel
student2 116012  0.5  0.0 146928  5956 ?        Sl   920   5:52 mpirun -np 4 interFoam -parallel
student2 116999  0.5  0.0 146928  5888 ?        Sl   920   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 &

其中,

0stdin (standard input)//标准输入
1stdout (standard output)//标准输出,在一般使用时,默认的是标准输出
2stderr (standard error) //标准错误信息输出

引文:

  1. https://blog.csdn.net/CloudBird07/article/details/105316298
  2. https://blog.csdn.net/DN_XIAOXIAO/article/details/78322847
  3. https://baike.baidu.com/item/nohup/5683841?fr=aladdin
  4. 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
  5. https://blog.csdn.net/hanbingchegu/article/details/108341254
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值