每30秒运行一次Laravel方法

时间:2014-11-20 14:51:53

标签: loops laravel cron sleep

我有一个在我的应用程序上调用特定URL时运行的方法。它处理数据库队列中的行。间隔设置为Cron可能的最小间隔,即。 1分钟。这需要下降到30秒,所以我想知道如何最好地实现这一目标。

我原本以为我可以在我的脚本中构建一个循环来运行代码两次,中间睡眠时间为30秒,但我想知道是否有更清洁的方式。

另外,有没有办法从命令行运行此方法,而无需调用实际的URL?

2 个答案:

答案 0 :(得分:3)

此答案受到this one

的强烈启发

您可以保留代码。要每分钟调用两次,你可以添加第二个cronjob,让一个cronjob在执行任务前30秒睡眠。

* * * * * /path/to/executable param1 param2
* * * * * ( sleep 30 ; /path/to/executable param1 param2 )

这有两个好处

  1. 您的代码并不需要担心执行的次数和次数(例如,如果您手动调用它,则不需要运行两次!)

  2. 如果您的代码需要10秒钟来执行所有操作,那么在函数内部使用sleep时会有延迟。这样你就不会。

答案 1 :(得分:1)

正如在类似的主题中所述,cron不适用于此,至少不是直接的。恕我直言,最理智的方法是编写一个shell脚本,每隔30秒执行一次任务,然后设置cron作业来检查脚本是否正在运行,如果没有,则应该启动它。

顺便说一下,存储过程在你的情况下不是一个好的解决方案吗?