每x分钟运行一次python作业

每x分钟运行一次python作业,python,mysql,sql-server,Python,Mysql,Sql Server,我有一个小的python脚本,它基本上连接到一个SQL Server(Micrsoft)数据库并从那里获取用户,然后将他们同步到另一个mysql数据库,基本上我只是运行查询来检查用户是否存在,如果不存在,然后将该用户添加到mysql数据库 脚本通常需要大约1分钟的时间来同步。我要求脚本每5分钟(例如)执行一次工作(每5分钟同步一次) 建造这座大楼的最佳方式是什么 我为用户提供了一些测试数据,但在真实的网站上,有更多的用户,所以我不能保证脚本需要1分钟才能执行,甚至可能需要20分钟。但是,如果每次

我有一个小的python脚本,它基本上连接到一个SQL Server(Micrsoft)数据库并从那里获取用户,然后将他们同步到另一个mysql数据库,基本上我只是运行查询来检查用户是否存在,如果不存在,然后将该用户添加到mysql数据库

脚本通常需要大约1分钟的时间来同步。我要求脚本每5分钟(例如)执行一次工作(每5分钟同步一次)

建造这座大楼的最佳方式是什么

我为用户提供了一些测试数据,但在真实的网站上,有更多的用户,所以我不能保证脚本需要1分钟才能执行,甚至可能需要20分钟。但是,如果每次脚本执行的时间间隔为15分钟,则非常适合解决此问题

更新: 我有sql server windows db的连接参数,所以我使用一个小型ubuntu服务器在位于不同服务器上的两个数据库之间进行同步。假设db1(windows)和db2(linux)是数据库服务器,我使用s1(python服务器)以及pymssql和mysql-python模块进行同步


关于我不确定
cron
是否适合这份工作。在我看来,如果每15分钟运行一次,但有时同步需要20分钟,那么可能会同时运行多个进程,并且可能会发生冲突

如果驱动力是可变执行时间之间的恒定等待时间,那么您可能需要一个具有等待的连续运行的进程

def main():
    loopInt = 0
    while(loopInt < 10000):
        synchDatabase() 

        loopInt += 1
        print("call #" + str(loopInt))
        time.sleep(300)  #sleep 5 minutes

main()
def main():
loopInt=0
而(loopInt<10000):
synchDatabase()
loopInt+=1
打印(“调用#”+str(loopInt))
时间。睡眠(300)#睡眠5分钟
main()
(显然不是连续的,而是长时间运行的)您可以将while的结果设置为true,它将是连续的。(注释掉
loopInt+=1


编辑为添加:请参阅有关监视进程的注释中的注释,因为您不希望脚本挂起或崩溃,并且您不知道它。

您可能希望使用处理队列的系统,例如RabbitMQ,并使用芹菜作为python接口来实现它。使用芹菜,您可以将任务(如脚本的执行)添加到队列中,或者运行一个在给定时间间隔后执行任务的计划(如
cron


开始吧

你使用的是什么操作系统?很抱歉,应该早些时候澄清,Ubuntu现在,请查看原始的后期编辑以了解更多详细信息。我想这样运行:(运行)15分钟间隔(运行)15分钟间隔(运行)。。。每次运行可能需要任意时间,只要它完成,如果脚本卡住,可能会超时,芹菜会有帮助吗?是的。芹菜有一个组件
beat
,它将所有计划的任务放入一个队列中。然后它的
worker
组件确保任务完成。时间限制文档在这里如果你要做这样的事情,我会有一个小的bash scriptlet,比如说,每小时检查一次脚本是否正在运行。(可能使用以确保获得脚本的一份副本,而不是多份副本)