linux下后台运⾏python脚本
这两天要在服务器端⼀直运⾏⼀个Python脚本,当然就想到了在命令后⾯加&符号
$ python /data/python/server.py >python.log &
说明:
1、 > 表⽰把标准输出(STDOUT)重定向到那个⽂件,这⾥重定向到了python.log
2、 & 表⽰在后台执⾏脚本
这样可以到达⽬的,但是,我们退出shell窗⼝的时候,必须⽤exit命令来退出,否则,退出之后,该进程也会随着shell的消失⽽消失(退出、关闭)
使⽤nohup(not hang up):
$ nohup python /data/python/server.py > python.log3 2>&1 &
说明:
1、1是标准输出(STDOUT)的⽂件描述符,2是标准错误(STDERR)的⽂件描述符
linux重定向1> python.log 简化为 > python.log,表⽰把标准输出重定向到python.log这个⽂件
2、2>&1 表⽰把标准错误重定向到标准输出,这⾥&1表⽰标准输出
为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,⽽STDOUT有。
这就会导致 commond > python.log 2> python.log ⽂件python.log被两次打开,⽽STDOUT和 STDERR将会竞争覆盖,这肯定不是我门想要的3、好了,我们现在可以直接关闭shell窗⼝(我⽤的是SecureCRT,⽤的⽐较多的还有Xshell),⽽不⽤再输⼊exit这个命令来退出shell了
$ ps aux|grep python
tomener 1885 0.1 0.4 13120 4528 pts/0 S 15:48 0:00 python /data/python/server.py
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不启⽤缓冲。
所以改正命令,就可以正常使⽤了
$ nohup python -u test.py > out.log 2>&1 &
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论