nohup:在Linux服务器后台跑程序

一些时间长的命令经常需要在后台运行,但苦于通常我们都是通过PC去连接服务器,一直保持ssh连接是不太现实的,这时就需要一些命令使得断开ssh连接后服务器依旧在运行命令。

命令后面加&在后台运行

用法:

1
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.
用法:

1
nohup python -u test.py > test.log 2>&1 &

其中,Python的-u参数用来禁用缓冲区,将输出直接写入文件。
运行之后可通过jobs查看正在运行的任务。
重新登录之后使用ps和grep命令可查看后台进程,如ps aux|grep python可查看所有关于python的进程。
:以上方法适用于大部分命令,将下载和上传的任务放到后台也是很方便的~

参考

http://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/
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/