一些时间长的命令经常需要在后台运行,但苦于通常我们都是通过PC去连接服务器,一直保持ssh
连接是不太现实的,这时就需要一些命令使得断开ssh
连接后服务器依旧在运行命令。
&
在后台运行用法:
python test.py > test.log 2>&1 &
其中:
>
表示将标准输出(STDOUT)重定向到test.log
文件;2>&1
表示将标准错误(STDERR)重定向到标准输出。1
是标准输出的文件描述符,2
是标准错误的文件描述符;&
表示将程序放到后台运行。
这样,我们已经将命令放到了后台执行。但是,只要我们断开ssh
连接,进程将会被终止,是因为我们运行命令的session
属于ssh
的子进程。
nohup
命令使用nohup
即可实现断开ssh
连接命令也不会被终止。nohup
: no hang up.,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"
来更改缺省的重定向文件名
用法:
nohup python test.py > test.log 2>&1 &
现在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在,但是,在python运行中却查看不到输出!
因为:Python的输出有缓冲,导致python.log3并不能够马上看到输出。使用-u
参数,使得python不启用缓冲。所以改正命令,就可以正常使用了
运行之后可通过jobs
查看正在运行的任务。
重新登录之后使用ps和grep命令可查看后台进程,如ps aux|grep python
可查看所有关于python
的进程。
注:以上方法适用于大部分命令,将下载和上传的任务放到后台也是很方便的~
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
https://suixinblog.cn/2018/11/nohup.html
https://iyuluo.com/2017/11/01/Linux-%E4%B8%8B%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8CPython%E8%84%9A%E6%9C%AC/