0

我正在尝试安排一个进程,我将它保存在一个包含要运行的所需日期时间的表上。

我只是不知道如何解决这个问题,我应该为每个用户创建的进程创建一个条目,还是应该只创建一个条目,每 X 分钟运行一个脚本,检查数据库中应该是的进程运行,运行它们?

编辑: 我正在从处理任务调度的任何人那里寻找每种方法的优缺点和指导。我也想让它保持平台独立,但这不是必需的。我目前正在使用 linux 机器。

4

2 回答 2

1

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

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

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

  • 创建一个单一的操作系统级调度程序滴答,每 n 秒运行一次工作脚本(Cron、Windows 调度程序等)。这将是您唯一特定于平台的部分
  • 如果操作系统级别的调度程序太粗略,请安排一个包装脚本,该脚本启动工作脚本几次,由 调度usleep(),直到达到操作系统级别的粒度
  • 在工作脚本中首先做记账:写一个标志文件,或者,如果它存在,检查它是否有一个停滞的工人死锁,可能会警告错误
  • 之后,开始一个循环:
    • 出列一个工作项(依赖项和顺序在这里),将其标记为已启动
    • 运行此工作项,将其标记为完成
    • 更新您的标志文件以显示您的进度
  • 完成后,杀死你的标志文件并结束

对于相当多的仅轮询工作负载,我使用这种方法取得了很好的效果。

编辑

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

于 2013-07-31T00:44:50.840 回答
0

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

于 2013-07-31T00:34:54.710 回答