网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 Python脚本后台运行的几种方式
范文
    这篇文章主要介绍了Python脚本后台运行的几种方式,linux下后台运行、通过upstart方式实现、通过bash脚本实现、通过screen、tmux等方式实现,需要的朋友可以参考下
    一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本:
    代码如下:
    python test1.py &
    现在脚本正常运行,通过ps能看到进程号,此时直接关闭ssh终端(不是用exit命令,是直接通过putty的关闭按钮执行的), 再次登录后发现进程已经退出了。
    通过后台启动的方式该问题已经解决,这里总结下,也方便我以后查阅。
    linux 下后台运行
    通过fork实现
    linux环境下,在c中守护进程是通过fork方式实现的,python也可以通过该方式实现,示例代码如下:
    代码如下:
    #!/usr/bin/env python
    import time,platform
    import os
    def funzioneDemo():
    # 这是具体业务函数示例
    fout = open('/tmp/demone.log', 'w')
    while True:
    fout.write(time.ctime()+'\n')
    fout.flush()
    time.sleep(2)
    fout.close()
    def createDaemon():
    # fork进程
    try:
    if os.fork() > 0: os._exit(0)
    except OSError, error:
    print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
    os._exit(1)
    os.chdir('/')
    os.setsid()
    os.umask(0)
    try:
    pid = os.fork()
    if pid > 0:
    print 'Daemon PID %d' % pid
    os._exit(0)
    except OSError, error:
    print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
    os._exit(1)
    # 重定向标准IO
    sys.stdout.flush()
    sys.stderr.flush()
    si = file("/dev/null", 'r')
    so = file("/dev/null", 'a+')
    se = file("/dev/null", 'a+', 0)
    os.dup2(si.fileno(), sys.stdin.fileno())
    os.dup2(so.fileno(), sys.stdout.fileno())
    os.dup2(se.fileno(), sys.stderr.fileno())
    # 在子进程中执行代码
    funzioneDemo() # function demo
    if __name__ == '__main__':
    if platform.system() == "Linux":
    createDaemon()
    else:
    os._exit(0)
    通过upstart方式实现
    可以通过upstart把应用封装成系统服务,这里直接记录下完整示例。
    1、编写python脚本
    代码如下:
    [root@local t27]# cat test123.py
    #!/usr/bin/env python
    import os,time
    while True :
    print time.time()
    time.sleep(1)
    2、编写upstat配置文件
    代码如下:
    [root@local t27]# cat /etc/init/mikeTest.conf
    description "My test"
    author ""
    start on runlevel [234]
    stop on runlevel [0156]
    chdir /test/t27
    exec /test/t27/test123.py
    respawn
    3、重新加载upstate
    代码如下:
    initctl reload-configuration
    4、启动服务
    代码如下:
    [root@local t27]# start mikeTest
    mikeTest start/running, process 6635
    [root@local t27]# ps aux | grep test123.py
    root 6635 0.0 0.0 22448 3716 ? Ss 09:55 0:00 python /test/t27/test123.py
    root 6677 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py
    5、停止服务
    代码如下:
    [root@local t27]# stop mikeTest
    mikeTest stop/waiting
    [root@local t27]# ps aux | grep test123.py
    root 6696 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py
    [root@local t27]#
    通过bash脚本实现
    1、python代码
    代码如下:
    [root@local test]# cat test123.py
    #!/usr/bin/env python
    import os,time
    while True :
    print time.time()
    time.sleep(1)
    2、编写启动脚本
    代码如下:
    [root@local test]# cat start.sh
    #! /bin/sh
    python test123.py &
    3、启动进程
    代码如下:
    [root@local test]#./start.sh
    如果直接用&启动进程:
    代码如下:
    python test123.py &
    直接关闭ssh终端会导致进程退出。
    通过screen、tmux等方式实现
    如果临时跑程序的话,可以通过screen、tmux启动程序,这里描述下tmux启动的方式。
    1、启动tmux
    在终端输入tmux即可启动
    2、在tmux中启动程序
    直接执行如下命令即可(脚本参考上面的): python test123.py
    3、直接关闭ssh终端(比如putty上的关闭按钮);
    4、重新ssh上去之后,执行如下命令:
    代码如下:
    tmux attach
    现在可以看到python程序还在正常执行。
    windows下后台运行
    在windows下没有深入的研究过,我经常用的方法是修改python脚本的扩展名为".pyw",双击即可后台运行,不需要修改任何代码。
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/15 5:34:32