Linux小技巧:后台提交任务与日志保存

版权声明:作者原创,转载请附上文章链接。 https://blog.csdn.net/qq_36330643/article/details/86283033

前言:先说说自己的情况,从18年9月开始,整个工作环境和生产工具发生了很大的变化,之前工作大部分时间用的是Windows做开发和少数Linux,现在要全部使用mac和公私有云的Linux环境,这种情况下对自己的做事方式、技术要求、技术栈和使用工具都发生了变化。由于之前在Linux上面的积累很少,所以又要开启一段学习之路啦!

今天,我重点要介绍的是Linux后台任务提交的几种常用方式推荐。

为什么需要后台提交任务呢?我们设想一下,如果你的终端mac连接了Linux服务器,你恰好在提交一个hadoop或者spark任务,或者你在训练一个机器学习或者深度学习模型,但是突然你要离开一下,中途你的mac锁屏或者断网了,那任务是不是就中断了呢?回来之后,你以为任务结束了,结果发现,任务被意外中断了,好吧,从头开始。

遇到这种情况是不是很不爽啊,当然,如果你的任务很小,很快执行完还好,但是遇到大型任务,连续几个小时甚至更长,你总不能一直守在电脑前面吧,只有傻子才这么干,哈哈!!!

为了避免上述情况发生和解放自己的双手,下面,我来介绍几个我最近使用的Linux任务后台提交工具:

1.&

这是一个很简单的操作,在命名后面使用&,指定命令后台执行:例如:

sh test.sh & 

不过,任务在后台运行会将结果输出到屏幕上,可能会干扰你的工作,如过屏幕内容太多,应该保存下来,有利于错误排查。最好使用下面的方法把它的输出重定向到某个文件中:

sh test.sh >  out.file  2>&1  & 

这样,我们把屏幕输出重定向到一个叫out.file的文件中。

当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。

查看后台进程:jobs -l

或者:ps -ef | grep 进程号

杀掉进程: kill -9 进程号

2.nohup

使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:

nohup command &

同样,我们把打印信息重定向到文件:

nohup command > myout.file 2>&1 &

使用nohup命令后,如果任务结果或者需要杀掉,可以使用如下方法:

ctrl + z  可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

ctrl+c  终止前台命令。
 
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。

3.tmux

Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。

tmux需要安装,mac安装方式:

安装 Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
安装tmux
$ brew install tmux

安装完成之后:

1. tmux new -s session1 新建会话

使用 tmux new -s 命令新建一个会话 -s (其实是session的头字母)。后面指定会话名即可。运行之后会从shell的终端环境进入到会话环境中,并停留在刚才新建的会话中。

2. ctrl+b d 退出会话,回到shell的终端环境

我们刚才是通过 tmux new -s 命令创建一个tmux会话并进入该会话的,如果要退出这个会话环境回到终端环境(会话里面的程序不会退出在后台保持继续运行)。应该如何操作呢,例如上图,当前我们在tmux的会话环境中,使用一个快捷键 ctrl+b d (按ctrl+b 之后再按一个字母d即可,字母d是detach的缩写)。

3. tmux ls 终端环境查看会话列表

在终端环境中,我们可以通过tmux ls 命令来查看后台运行中的tmux的会话列表。

4. tmux a -t session1 从终端环境进入会话

如果在终端环境中运行 tmux ls 查看有tmux会话正在后台运行,如何进入到该正在后台中运行的会话呢,通过运行 tmux a -t session1 即可进入到该已存在的会话 session1 中。其中a字母是attach的头字母,表示附加, -t 指定要进入已存在的会话名,如果不存在则会报告 session not found 错误。

5. tmux kill-session -t session1 销毁会话

我们可以在终端环境和会话环境中销毁会话,例如在终端环境中运行 tmux kill-session -t session1 结束名字为session1的tmux会话。

在会话环境中运行 ctrl+b : (注意按组合键之后再按一个冒号键),状态栏变成黄色之后提示我们可以在会话环境中输入命令,此时输入 kill-session -t session1 回车即可。其中session1是要销毁的会话名。

到此为止,tmux的基本使用使用方式就是这样,比如你创建了一个tmux窗口,现在任务还在执行,你要回家了,没关系,轻轻合上你的电脑,回到家登录终端,tmux a -t session1重新进入,你还可以看到你的任务。

下面介绍几个酷炫的操作:

1.上下分屏:ctrl + b 再按 " ;

2.左右分屏:ctrl + b 再按 % ;

3.切换屏幕:ctrl + b 再按o ;

4.关闭一个终端:ctrl + b 再按x;

5.上下分屏与左右分屏切换: ctrl + b 再按空格键

好了,今天就介绍这3个最常用的工具,这3种工具已经完全可以胜任你的工作中了。

使用建议:

1.如果是小的任务和命令,推荐使用nohup和&;

2.如果是跑数据或者训练模型,首选tmux,我觉得很不错。

tmux推荐阅读这篇:http://www.cnblogs.com/kevingrace/p/6496899.html

猜你喜欢

转载自blog.csdn.net/qq_36330643/article/details/86283033