[Linux] Python脚本如何在linux后台运行以及输出重定向问题

在部署.py脚本到linux服务器的时候,我们经常想把后台脚本输出(程序print)的内容存到日志里。

首先.py后台运行的2个方法:

1.  nohup

nohup python -u MainServices.py >> services.log 2>&1 &

>> services.log    为重定向追加输出log到现有services.log文件, 如果写>重定向的话是清空原文件services.log并替换log
python -u 这个非常重要, 由于python有缓冲机制,print不一定会立刻输出到文件!!! 加了-u可以让stdout等强制无缓冲, 立刻输出到文件!
2>&1  将错误重定向到标准输出中(意思是都显示在一起!在一个文件里)
最后的& 表明后台运行

2. screen

因为每条语句都写nohup太麻烦了!所以有了万能的screen. (screen需要你手动安装在你的OS上,但是强烈推荐这个工具!)
他的效果就是生成多个不同的子shell环境(screen session)可以运行后台作业,并且可以自由在这些单独的环境之间切换。
注意, screen其实和最著名的编辑器vim调用命令方式一样,在screen的子shell中,通过快捷键Ctrl+a进入命令模式(比如detach的命令是Ctrl+a 然后Ctrl+d)。

命令:

screen 启动新的screen session, screen -S 是通过指定名字启动新screen session (推荐!!!)
ctrl+a然后ctrl+a 把当前的screen session放到后台运行,回到最开始的主shell环境
exit 彻底退出当前的screen session
screen -x 回到上一个激活的screen session
screen -ls 列出所有现在后台的screen session
screen -r 在用screen -ls列出素有screen session以及他们的进程号(pid)后 用这个命令跳转到相应的screen
screen - wipe  删掉无用的session session 
ctrl+a 然后输入:sessionname 重命名当前session。

例子:

root@vultr:  screen
root@vultr:  python -u MainServices.py >> services.log 2>&1
root@vultr:  (按下CTRL+A 然后CTRL+D退出当前screen session保持语句在后台执行) 

root@vultr:  screen -x
(screen -x 又回到刚才运行MainServices.py的screen session)

PS: 在screen session里貌似rz是不管用的.... 貌似只有退出screen才可以用rz传文件

你可能感兴趣的:(Linux后台技术,Python基础)