我正在寻找关于如何可靠运行后台操作的build议。 我有许多服务器向AWS SQS发布操作消息,而且我有另一台服务器在空闲时会运行这些CPU密集型操作。
我需要某种轮询机制来经常检查SQS,以便进行新的操作。 cron是做这件事的最好方法吗? 我正在考虑把PHP脚本放在cron中,每5分钟轮询一次 – 这是可靠的吗?
我需要确保一次处理一个操作(来自SQS的消息)。 某些处理可能需要5分钟以上 – 如果操作未决,我如何通知cron不要轮询?
我怎样才能运行操作只有当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,一旦启动就不会被阻止。