可靠地运行后台操作

我正在寻找关于如何可靠运行后台操作的build议。 我有许多服务器向AWS SQS发布操作消息,而且我有另一台服务器在空闲时会运行这些CPU密集型操作。

  1. 我需要某种轮询机制来经常检查SQS,以便进行新的操作。 cron是做这件事的最好方法吗? 我正在考虑把PHP脚本放在cron中,每5分钟轮询一次 – 这是可靠的吗?

  2. 我需要确保一次处理一个操作(来自SQS的消息)。 某些处理可能需要5分钟以上 – 如果操作未决,我如何通知cron不要轮询?

  3. 我怎样才能运行操作只有当CPU空闲? PHP是否使CPU数据可用?

最重要的是,我需要这是高度可靠的。 如果一个操作的处理失败,不应该影响将来的操作。

有人能指出我正确的方向吗?

我需要某种轮询机制来经常检查SQS,以便进行新的操作。 cron是做这件事的最好方法吗? 我正在考虑把PHP脚本放在cron中,每5分钟轮询一次 – 这是可靠的吗?

这应该是相当可靠的,除非你需要更细粒度的东西。

我需要确保一次处理一个操作(来自SQS的消息)。 某些处理可能需要5分钟以上 – 如果操作未决,我如何通知cron不要轮询?

让你的程序在cron中检查一些邮票文件的存在。 如果存在,那么被调用的cron程序就会退出而不做更多的工作。

我怎样才能运行操作只有当CPU空闲? PHP是否使CPU数据可用?

如果使用chrt --idle command args通过调度类IDLE运行CPU密集型操作

注意,这只会在处理器没有其他工作要做的时候通过处理队列运行,您可能会发现这种行为导致进程变得太慢了! 这样做的一个缺点是你的负载将总是出现在1以下(因为进程将在运行队列中长时间停留而不被调度)。

最后,你可以使用batch命令来计划任务在负载低于一定值时执行 – 坦率地说,它不是很dynamic,一旦启动就不会被阻止。