在服务器上,为了退出终端,程序依然能够运行。如当我们在服务器上运行某一个脚本的时候,若是所需时间很长,我们就会希望人去睡觉,断开shell后,程序还可以继续在服务器后台运行,(我好像一个资本家哈哈),这个时候就要对命令做出些调整啦。
在一顿搜索下,找到如下方法:
(以下操作都是基于进入.py脚本所在文件夹后进行)
一、运行关键词:nohup和&
基础命令:该命令是运行目标脚本的基本命令,在断开连接后会停止运行
python download.py
可后台运行的命令:
nohup python -u download.py > test.log 2>&1 &
nohup 即no hang up,不要挂断
-u 代表程序不启用缓存,也就是把输出直接放到log中,没这个参数,log文件的生成会有延迟
python -u download.py 运行目标download脚本,且把输出直接放到log中
> test.log 命令启动后会在当前目录下自动生成一个名为test的.txt文件,将输出日志(即.py脚本运行中所产生的输出)保存到这个log中,便于查看运行过程与结果,如下图所示
2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
2>&1 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
& 最后一个& ,代表该命令在后台执行
(.py的结果存放位置还是会和基础命令相同,就比如我的download文件会把结果放在.py同目录文件夹下,后台运行后也是如此,test.log存放的只是原来会在控制面板显示的脚本print内容)
bear总结:
nohup代表不挂断,&表示后台运行,二者结合,就是.py脚本不会再断开shell后挂断,且会在后台继续运行
(若是服务器出现了问题,比如重启了或者坏了啥的,那就没办法了)
二、查看及结束进程
上述程序后太运行命令执行后会在终端显示进程序号,如下图所示:
查看及结束后台进程时依靠进程序号来是实现的,一个服务器会同时挂机多个程序,则需要查询全部的进程序号及后续操作
利用ps命令查看后台所有py运行程序的序号:
ps -ef |grep python
结果如下图所示
找到对应的进程序号,结束(杀死)想要结束的进程
kill -9 进程序号
利用tail命令查看日志内容,原本输入到test.log的内容就又被显示到屏幕上了(Ctrl+c可结束显示)
tail -f test.out