我怎样才能在后台运行我的Python脚本?

我有一个小的python脚本,创build一个从MySQL拉的数据图。 我试图找出一种定期在后台运行脚本的方法。 我已经尝试了一些事情:

  1. 运行脚本的Cron作业
  2. 一个循环计时器
  3. 使用&命令在后台运行脚本

这些都有其优点和缺点:

  1. 每半小时运行一次Cron Job似乎就会消耗更多的资源,这是值得的。
  2. 放入脚本的Loop定时器实际上并不把脚本放在后台,它只是保持运行。
  3. Linux和命令背景的过程,但不像一个真正的Linux服务,我不能重新启动/停止而不杀死它。

有人能指点我一个方法来获得所有这些方法的最好的吗?

你为什么不试着把你的脚本变成适当的守护进程? 这个链接是一个很好的开始。

import os import subprocess import time from daemon import runner class App(): def __init__(self): self.stdin_path = '/dev/null' self.stdout_path = '/dev/tty' self.stderr_path = '/dev/tty' self.pidfile_path = '/tmp/your-pid-name.pid' self.pidfile_timeout = 5 def run(self): try: while True: ### PUT YOUR SCRIPT HERE ### time.sleep(300) except Exception, e: raise app = App() daemon_runner = runner.DaemonRunner(app) daemon_runner.do_action() 

您可以像任何其他Linux服务一样启动/停止/重新启动此脚本。

cron工作可能是一个很好的方法,因为shell方法需要手动干预来启动它。

几点建议:

您可以使用锁定文件来确保cron作业只启动python脚本的一个实例 – 对于较大的作业使用cron时经常出现问题,因为它在第一个实例实际完成之前启动第二个实例。 你可以简单地通过检查锁定文件是否存在来做到这一点,如果不存在,那么在脚本开始处触摸文件,并将其作为脚本末尾的最后一个动作。 如果锁定文件存在 – 只需退出脚本,因为已经有一个实例正在运行。 (当然,如果脚本死了,你必须在再次运行脚本之前删除锁定文件)。

另外,如果资源过度使用是一个问题,那么可以通过给它一个低优先级(例如nice -n 19的前缀)来确保脚本不会占用过多的资源。