python后台运行方式
在linux中执行python程序的时候,我们通常会用python xx.py命令来执行,但这样执行的程序在关闭linux的控制台后,执行的程序就会退出,要让程序关闭后继续执行该怎么办?
要让python程序在关闭控制台后继续执行,我们需要使用nohub命令。
1 | $ nohup python -u xx.py > log.out 2>&1 & |
1 1
是标准输出(STDOUT)的文件描述符,2
是标准错误(STDERR)的文件描述符1>log.out
简化为>log.out
,表示把标准输出重定向到log.out这个文件
2 2>&1
表示把标准错误重定向到标准输出,这里&1
表示标准输出,为什么需要将标准错误重向到标准输出?这是因为标准错误没有缓冲区,而STOUT有,这就会导致log.out文件被两次打开,而STDOUT和STDERR将会竞争覆盖。
方法一:脚本后加&
加了&以后可以使脚本在后台运行,这样的话你就可以继续工作了,但是有一个问题就是你关闭终端连接后,脚本就会停止运行
1 | $ python updatetest & |
方法二:使用nohup在后台执行命令
使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令,如下所示:
1 | $ nohup ./my-shell-script.sh & |
方法三:使用screen执行命令
通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen命令。
linux和screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。
方法四:使用at将一个命令作为批处理执行
使用at命令,你可让一个命令在指定的日期和时间运行,使用要在明天上午10点在后台执行备份脚本,执行下面的命令:
1 | $ at -f backup.sh 10 am tomorrow |
方法五:使用watch连续地执行一个命令
要想按一个固定的间隔不停地执行一个命令,可以使用watch命令,如下所示:
1 | $ watch df -h |
另外查看进程确认脚本是否在继续运行的命令
1 | $ ps -ef | grep 脚本名 |