1.Linux shell
1、在讲这节课之前我们先看一下linux shell的标准输入,标准输出及错误输出。Linux下习惯性的用0代表标准输入,1代表标准输出,2代表错误输出。
2、紧接着我们看一下linux下重定向>(>>表示追加),通过重定向我们可以将输出重定向到我们指定的地方,例如:文件,设备。
3、最后了解一下Linux下关于/dev/null这个目录的作用,对于该目录我们可以将它理解为是一个Linux下的一个黑洞,任何东西丢进该目录都会被吸收而且无法追踪。
4、举例:
ls > ls.log = ls 1> ls.log#标准输出重定向
ls 2> ls.log #标准错误重定向
例1中我们可以看出默认情况下>是进行标准输出的,故而ls > ls.log = ls 1> ls.log#标准输出重定向。如果我们想要将错误输出和标准输出同时输出到同一个文件怎么整,那么今天他来了。
ls >ls.log 2>&1 &
有些人说我不需要保留这些输出信息,那么黑洞它能满足你的需求:
ls >/dev/null 2>&1
2.&与nohup
& : 指在后台运行,当用户断开SSH连接的时候,命令自动也跟着退出
nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去(这句话可能有点不好懂,看下面举例说明),和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行。
那么,我们可以巧妙的吧他们结合起来用就是nohup COMMAND &
这样就能使命令永久的在后台执行,是不是很奈斯,很奈斯有木有。
举例:
python3 xx.py run &
将python3 xx.py run 任务放到后台 ,关闭xshell,对应的任务也跟着停止。
nohup python3 xx.py run
将python3 xx.py run任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell依然继续运行。
nohup python3 xx.py run &
将python3 xx.py run任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
3.实战
run.sh(赋予改文件777权限,确保文件可执行):
nohup sudo python3 xx.py run --rf release >/dev/null 2>&1 &
在上面例子中:2>&1是将标准错误2重定向到标准输出(&1),标准输出(&1)再被重定向输入到/dev/null文件中。其中nohup COMMAND &
格式是让我们的命令永久的在后台执行,–rf release为python程序运行需要的参数。
说到这里问题来了有人说我想一键退出我的程序,而我又不想去查pid然后在kill怎么办呢?今天它来了。
stop.sh(赋予改文件777权限,确保文件可执行):
for iPid in `ps aux | grep python3 | grep xx.py | awk '{print $2}'`; do sudo kill -9 ${iPid}; done
上面例子中ps aux | grep python3 | grep xx.py
的作用:查出有关xx.py的进程信息。
awk '{print $2}'的作用就是读取上面的进程信息的第二列(详情可以查看awk的知识):
for iPid in xx ; do sudo kill -9 ${iPid}; done的作用就是杀死相关进程。
实际运用中我们可以修改run.sh为
./stop.sh
nohup sudo python3 xx.py run --rf release >/dev/null 2>&1 &
这样就可以确保我们不会重复启动同一个后台程序,因为./stop.sh就相当于杀死了对应的进程。