linux 下后台运行python脚本

这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号

1
$ python /data/python/server.py >python.log &<br>说明:<br>     1、 > 表示把标准输出(STDOUT)重定向到 那个文件,这里重定向到了python.log<br>     2、 & 表示在后台执行脚本<br>这样可以到达目的,但是,我们退出shell窗口的时候,必须用exit命令来退出,否则,退出之后,该进程也会随着shell的消失而消失(退出、关闭)

 

使用nohup(not hang up):

1
$ nohup python /data/python/server.py > python.log3 2>&1 &<br>说明:<br>11是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符<br>     1> python.log 简化为 > python.log,表示把标准输出重定向到python.log这个文件<br>22>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出<br>     为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。<br>     这就会导致  commond > python.log  2> python.log 文件python.log被两次打开,而STDOUT和             STDERR将会竞争覆盖,这肯定不是我门想要的<br>3、好了,我们现在可以直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了<br><br>$ ps aux|grep python<br>tomener 1885  0.1  0.4  13120  4528 pts/0    S    15:48   0:00 python /data/python/server.py<br>tomener 1887  0.0  0.0   5980   752 pts/0    S+   15:48   0:00 grep python

 

现在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在

 

但是,在python运行中却查看不到输出!

因为:

python的输出有缓冲,导致python.log3并不能够马上看到输出。

使用-u参数,使得python不启用缓冲。

所以改正命令,就可以正常使用了

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

  

 

posted @   ohword  阅读(46451)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示