创建cron作业

时间:2013-07-31 00:30:22

标签: php

我正在尝试安排一个流程,我将其保存在一个包含所需日期时间的表格上。

我只是不知道如何处理这个问题,我应该为每个用户创建的进程创建一个条目,还是应该创建一个单独的条目,每隔X分钟运行一个脚本,检查数据库是否有进程应该运行,并运行它们?

修改 我正在寻找任何处理任务调度的人的每种方法和指导的优缺点。我也想保持平台独立,但这不是一个要求。 我目前正在开发一台linux机器。

2 个答案:

答案 0 :(得分:1)

您可能希望首先定义一些属性的需要(或不是):

  • 抵御脚本失败的能力
  • 如果需要,锁定(单实例脚本)
  • 易于管理
  • 遵循依赖关系的可能性(A必须在B之前运行)
  • 无需人工干预即可启动
  • 后台流程不会导致交互性能匮乏

考虑到这些,我通常使用以下方案:

  • 创建一个操作系统级调度程序标记,每n秒运行一个工作程序脚本(Cron,Windows调度程序,等等)。这将是您唯一的平台特定部分
  • 如果操作系统级别的调度程序太粗糙,请安排一个包装器脚本,该脚本会按usleep()计划的几次启动工作程序脚本,直到达到操作系统级别的粒度
  • 首先在工作人员脚本中进行簿记:编写一个标志文件,如果存在,则检查它是否存在停滞工作者死锁,可能会在出错时发出警告
  • 之后,开始一个周期:
    • 将一个工作项出列(依赖关系和序列转到此处),将其标记为已启动
    • 运行此工作项,将其标记为完成
    • 更新您的标记文件以显示您的进度
  • 当finsihed,杀死你的flagfile并结束

对于一些仅限民意调查的工作负载,我使用此方法取得了良好的效果。

修改

忘记一:如果你想要并行,只需同时启动可并行的工作项

答案 1 :(得分:0)

我认为你应该为每个用户创建的进程创建一个条目,因此他们“繁重”的工作是由cron完成的,而cron已经为此做了。此外,另一种方法需要您运行脚本,该脚本检查数据库的时间足够小,以便任何用户创建的进程按计划运行。