我有一个小的python脚本,创build一个从MySQL拉的数据图。 我试图找出一种定期在后台运行脚本的方法。 我已经尝试了一些事情:
这些都有其优点和缺点:
有人能指点我一个方法来获得所有这些方法的最好的吗?
你为什么不试着把你的脚本变成适当的守护进程? 这个链接是一个很好的开始。
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的前缀)来确保脚本不会占用过多的资源。