【问题标题】:Running a Laravel method every 30 seconds每 30 秒运行一次 Laravel 方法
【发布时间】:2015-01-18 11:43:28
【问题描述】:

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

我在想我可以在我的脚本中构建一个循环来运行代码两次,中间间隔 30 秒,但我想知道是否有比这更清洁的方法。

另外,有没有办法从命令行运行这个方法,而不需要调用一个实际的 URL?

【问题讨论】:

  • 或者保留你的代码并注册第二个 cronjob,它会休眠 30 秒。就像this answer中建议的一样@
  • 这对我有用,谢谢。你会建议我如何从评论中回答这个问题?
  • 我用一个例子写了一个答案并指出了优点......
  • 如果你还在,我想知道你如何从命令行调用 laravel 函数。谢谢你:)

标签: loops laravel cron sleep


【解决方案1】:

这个答案受到this one的强烈启发

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

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

这有两个好处

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我最初没有提供足够的信息,但存储过程不适合这种情况,因为脚本也调用第三方 API 并且具有相当多的逻辑。
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2012-07-11
    • 2019-07-12
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多