Linux下程序后台运行程序或脚本的方式-脚本执行-不建议screen

linux下远程后台运行程序有多种方式,估计screen的占了大多数了,其实还有更简单的实现方式。

screen在共享窗口和交互式操作的时候挺好用,但本质上是一个多窗口管理器,需要占用资源,不会使用的人可能都不知道自己创建了多少个窗口,通常来说一个服务器运行几百个甚至上千个都没什么问题,但这对于多用户使用的公共集群来说是个灾难。大家之所以喜欢screen主要还是因为windows的原因,让大家习惯任何东西都希望能看到怎么运行的。但其实这个在自己熟悉linux系统使用之后会发现没有太多用处。

所以这里给大家推荐使用脚本方式来后台运行程序,无状态,及时释放资源,操作记录也持久化。

在Linux下使用screen的基本方法:

#安装screen,直接使用yum命令即可,需要系统权限
yum install screen

#启动screen
screen

#创建新窗口
Ctrl + a c

#切换窗口
Ctrl + a n

#切换到上一个窗口:
Ctrl + a p

#查看自己已经开设的窗口
screen -ls

#切换到指定窗口:
Ctrl + a 数字

# 分离窗口
#分离一个窗口,但不退出并保持其运行:
Ctrl + a d
# 重新连接到一个已分离的窗口:
screen -r

#如果有多个分离的窗口,可以指定编号:
screen -r <窗口编号>

# 结束窗口
exit
#或使用以下快捷键:
Ctrl + a k

# 结束Screen,结束所有窗口并退出Screen:
Ctrl + a \

以上是Screen的基本使用方法,可根据需要进一步了解Screen的高级功能和参数。

screen 后台运行程序时需要screen服务一直运行,screen被kill掉则其他窗口都会被终止 

nohup命令用于在后台运行命令

nohup命令使用其实比screen更简单,没有其他多余的依赖的操作,也不用多个窗口切换,只需要按照正常命令运行方式在以前以后加上nohup   和   &  即可。而且nohup运行的后台程序不依赖任何远程连接服务,不用安装任何管理软件,即使断开ssh链接,远程程序照样运行,直到运行程序退出。

# 其中,COMMAND是要运行的命令。& 表示让命令在后台运行。
nohup COMMAND &
#运行nohup命令后,输出会被重定向到一个名为nohup.out的文件中。

###如果想指定输出文件名,可以使用-O选项:
nohup COMMAND -O FILENAME &

# 另外,nohup也提供了一个选项-n,可以将输出直接发送到标准输出,而不是重定向到文件中:
nohup COMMAND -n &

nohup实际操作(推荐)

##nohup运行自己的命令
nohup diamond blastp --query sample.fasta -d nr -e 0.00001 -o blast.out >dmndblast.log 2>&1 &
####上面命令中除了 nohup    2>&1 & 这个以外其他的都是自己原先直接运行的命令,简单吧。
####想实时监控程序运行情况也很简单直接使用下面命令:
tail -f dmndblast.log
####前面  >dmndblast.log 就是说明我们要将日志输入到这个文件中, 后面的 2>&1 &  则指的是将屏幕所有输出都放入日志。 如果没有指定日志文件,会在当前目录下直接生成一个nohup.out文件。多个nohup同时运行的时候就容易乱了,所以还是指定日志文件名才好。

#####指定日志文件的 > 符号有可能会与原有命令相冲突,要解决这个问题其实很简单,将命令包装成脚本文件,这样会形成两个进程,各负其责。
#如下面本身就有一个输出,如果直接使用nohup   和  > 指定日志文件就会出乱了。
metaphlan f_1.fastq,f_2.fastq --bowtie2out f.bowtie2.bz2 --nproc 60 --input_type fastq >f_mtphlan.txt

#因此可以这样写一个sh脚本,然后使用nohup运行脚本,这样程序的输出文件和屏幕输出及错误日志就分开了。
vim mtpln.sh
metaphlan f_1.fastq,f_2.fastq --bowtie2out f.bowtie2.bz2 --nproc 60 --input_type fastq >f_mtphlan.txt

#nohup 运行sh脚本
nohup sh mtphln.sh >mtphln.log 2>&1 &

#这样运行后,mtphln.log专门负责运行和错误日志文件了, 而脚本里面的 f_mtphlan.txt就成了命令原先所需要输出的结果。

使用脚本运行任务优势

1、可以记录自己命令操作,每次运行前编写脚本,所有自己想要运行和调试的命令都得以记载。

2、所有日志都可以输出到指定文件,需要实时监控的时候只需要查看日志即可

3、所有进行后台运行,运行窗口可以随时关闭。

4、程序运行完成后资源就得以释放,对多人集群操作友好。

5、编写脚本可以随时进行合并,个人运行工作随时可以批量运行;另外sh脚本在多服务端都可以直接运行。

6、脚本配合参数输入很容易实现批量操作处理,测试后移植到slurm超算脚本更加容易。

你可能感兴趣的:(运维,linux,centos,运维)