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