当前位置:  开发笔记 > 编程语言 > 正文

即使在我注销SSH后,如何在后台运行Python脚本?

如何解决《即使在我注销SSH后,如何在后台运行Python脚本?》经验,为你挑选了6个好方法。

我有Python脚本bgservice.py,我希望它一直运行,因为它是我构建的Web服务的一部分.即使在我注销SSH后,如何让它连续运行?



1> Edward Dale..:

运行nohup python bgservice.py &以使脚本忽略挂断信号并继续运行.输出将被输入nohup.out.

理想情况下,您可以使用类似的方式运行脚本,supervise以便在(何时)它死亡时重新启动它.


当我用nohup和&运行命令时,我收到消息`nohup:忽略put并将输出附加到'nohup.out'`当我按下enter时,进程退出状态1.发生了什么?

2> Cooper..:

如果你已经开始了这个过程,并且不想杀死它并在nohup下重启,你可以将它发送到后台,然后将其取消.

Ctrl+Z (暂停过程)

bg (在后台重启该过程

disown %1(假设这是作业#1,用于jobs确定)



3> Dirk Eddelbu..:

您也可以使用几乎每个Linux/Unix系统都应该具有的GNU屏幕.

如果你使用的是Ubuntu/Debian,它的增强版本byobu也相当不错.



4> Dustin Kirkl..:

描述你可能会考虑把您的Python脚本到合适的蟒蛇守护,这里.

python-daemon是一个很好的工具,可以用来运行python脚本作为后台守护进程而不是永远运行的脚本.您需要稍微修改现有代码,但其简单明了.

如果您遇到python-daemon的问题,还有另一个实用程序管理器会为您执行相同操作,但在这种情况下,您不必编写任何代码(或修改现有代码),因为这是一个开箱即用的daemonizing解决方案流程.



5> Randy Procto..:

你可以没有它,但我更喜欢屏幕.



6> Chouettou..:

这是一个使用装饰器在python中的简单解决方案:

import os, time

def daemon(func):
    def wrapper(*args, **kwargs):
        if os.fork(): return
        func(*args, **kwargs)
        os._exit(os.EX_OK)
    return wrapper

@daemon
def my_func(count=10):    
  for i in range(0,count):
     print('parent pid: %d' % os.getppid())
     time.sleep(1)


my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own

您当然可以替换bgservice.py文件的内容my_func.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有