python脚本后台运行
在服务器端仍然运行一个Python脚本,其实就想到了在命令前面加&符号linux循环执行脚本,代码如下:
$ python /data/python/server.py >python.log &
说明:
1、>表示把标准输出(STDOUT)重定向到哪个文件,这儿重定向到了python.log
2、&表示在后台执行脚本
这样可以抵达目的,然而,当退出shell窗口的时侯,必须用exit命令来退出,否则,退出以后,该进程也会随着shell的消失而消失(退出、关闭)。
解决办法:
使用nohup(nothangup)
$ nohup python /data/python/server.py > python.log 2>&1 &
说明:
其中:1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符
python.log简化为>python.log,表示把标准输出重定向到python.log这个文件&1表示把标准错误重定向到标准输出,这儿&1表示标准输出
为何须要将标准错误重定向到标准输出的缘由,是由于标准错误没有缓冲区,而STDOUT有。
这都会造成commond>python.log2>python.log文件python.log被两次打开,而STDOUT和STDERR将会竞争覆盖linux循环执行脚本,这肯定不是我门想要的.
3、好了,如今可以直接关掉shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出shell了。
$ nohup python tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0_copy.yml -o Global.pretrain_weights=./pretrain_models/detect_trained_model/ch_ppocr_mobile_v2.0_det_train/best_accuracy/ > log_detect_0928.txt 2>&1 &
$psaux|greppython查看Python的进程
如今当我们直接关掉shell窗口,再联接上服务器,查看Python的进程,发觉进程还在
然而,在python运行中却查看不到输出!
由于:
python的输出有缓冲,致使python.log3并不能否马上听到输出。
使用-u参数,致使python不启用缓冲。
所以改正命令,就可以正常使用了
$ nohup python -u test.py > out.log 2>&1 &
nohup和&的区别
&:指在后台运行
nohup:不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系linux源代码分析,比如我们断掉SSH联接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
&是指在后台运行linux服务器代维,但当用户退出(挂起)的时侯,命令手动也跟随退出
这么,我们可以巧妙的吧她们结合上去用就是
nohupCOMMAND&
这样才能使命令永久的在后台执行
nohup作用:使程序在服务器后台执行,执行程序的命令不依赖ssh界面。
用法:nohup需执行命令&