我使用Zend Server Jobs设置max concurrent jobs = 4,需要这个设置 - 许多高优先级的工作需要尽快服务。
此外,我还有低优先级的作业,执行时间长5-7分钟 - 数据库操作繁重 - 我希望此作业一次运行 - 如果并行运行则会争夺数据库资源和超时。我有创建它们的循环(大约30个作业),我正在检查具有正确名称的作业是否存在于队列中使用getJobsList(),拾取最大作业ID并设置为下一个作业的前任。但是,即使作业已经创建(第二次迭代)也没有被getJobsList()选中,并且以下迭代没有获得最大/最新的作业ID ......
在创建作业期间是否涉及延迟? createHttpJob()并且以下getJobsList()不会返回最近创建的...
在设置了前任并且前任失败后 - 如超时 - 它会自动失败依赖。
是否可以将前置任务设置为完成而不管状态如何 - 只是不在队列中或已经在运行?
答案 0 :(得分:1)
我正在试图弄清楚你的问题,它让我遇到了一个我修复了一段时间的问题,我在这里分享我的问题/解决方案,以便你可以从你的问题中找到一些方法,假设你能够通过一些提示来更好地解决您的问题。
我有一个相当简单的问题,我有一个消息表,我必须发布(以便他们的状态从Pending to Sent或Error更新)。现在让单个JOB运行并完成所有这些发送创建的问题,因此我必须生成多个实例,我通过crontab生成,每5秒启动一次(为此我必须编写睡眠逻辑,因为默认情况下cron默认每分钟启动)。现在每个作业都安排以5秒的间隔开始并具有特定的JOB-WORKER-ID,该ID作为脚本的参数手动分配,因为我想要每个作业的ID,所以同时没有重复的JOB-WORKER- ID有效。
为此我保留了一个像JOB_LOG这样的表,它记录了所有作业并存储了start_time,end_time和每个作业执行期间发送的消息数。现在每次我开始新的JOB时,我都会检查同一个JOB-WORKER-ID是否正在运行?通过触发查询到JOB_LOG表。
SELECT end_time FROM JOB_LOG WHERE job_worker_id = <N> ORDER BY JOB_LOG_ID DESC
如果未指定end_time,则表示JOB仍在运行,否则启动新JOB是安全的。 : - )
该表的表结构类似于以下内容:
job_log
- job_log_id
- start_time
- end_time
- message_sent_count
- job_worker_id
我知道我的答案并没有完全解决你的问题,但我发现有一些相似之处,你可以从内部找到一些线索。
祝你好运。