计划任务

未匹配的标注

Masonite 提供了一种非常简单的方式来运行周期性任务。任务可以很简单,例如每分钟清理一次数据库表的记录,在数据库之间同步记录,在每个月底发送发票。它们是你需要按计划运行的那些自动重复任务,例如每分钟、每小时、每天、每月或两者之间的任何时间。

创建任务

任务是你用来注册到 Masonite 调度程序的内容,它知道要运行哪些任务以及运行频率。

要创建任务,只需运行以下命令:

$ python craft task SendInvoices

这将创建一个如下所示的任务:

from masonite.scheduling import Task

class SendInvoices(Task):
    def handle(self):
        pass

您可以更改任务以执行您需要执行的任何操作:

from masonite.scheduling import Task

class SendInvoices(Task):
    def handle(self):
      users = User.have_invoices().get()
      for user in users:
        # 发送发票给用户
        pass

注册任务

然后,你必须将任务注册到 Masonite 调度程序。你可以在你的应用程序中轻松地做到这一点
Service Provider (如果你没有,你应该创建一个):

from app.tasks.SendInvoices import SendInvoices

class AppProvider(Provider):

    def register(self):
        self.application.make('scheduler').add(
          SendInvoices().daily()
        )

任务将按照您使用时间选项指定的运行频率运行。

Options

你可以根据需要指定要运行的任务。 可用的选项是:

Option Description
every_minute() 指定此任务每分钟运行一次
every_15_minutes() 指定此任务每 15 分钟运行一次
every_30_minutes() 指定此任务每 30 分钟运行一次
every_45_minutes() 指定此任务每 45 分钟运行一次
hourly() 指定此任务每小时运行一次
daily() 指定此任务在每天午夜运行
weekly() 指定此任务每周日 00:00 运行
monthly() 指定此任务在每月的第一天 00:00 运行
at(17) 指定运行作业的时间。可以与其他选项一起使用,例如daily()
run_every('7 minutes') 指定运行的时间量。可以是任意时间组合,例如7 months, 4 days, 3 weeks
daily_at(17) 每天在指定时间运行。时间为 24 小时制。8是“上午 8 点”,17是“下午 5 点”。
at_twice([8,17]) 早上 8 点和下午 5 点运行

运行任务

为了运行所有已注册的任务,执行以下命令,将根据计算机/服务器的时间去发现和运行需要执行的任务:

$ python craft schedule:run

要仅运行特定的注册任务,我们可以使用--task选项:

$ python craft schedule:run --task MyTask

最后,我们可以强制任务立即运行,我们可以使用--force选项。这在本地开发时特别有用。

$ python craft schedule:run --task MyTask --force

定时任务

设置 Cron 作业仅适用于基于 UNIX 的机器,例如 Mac 和 Linux。 Windows 有一个类似的计划,称为任务计划程序,它很相似,但在设置时需要不同的说明。

尽管上面的schedule:run命令很有用且需要,但我们仍然需要一种方法来每分钟运行它。我们可以通过服务器上的 cronjob 来做到这一点

我们将向您展示一个示例 cron 作业,然后我们将介绍如何构建它。

PATH=/Users/Masonite/Programming/project_name/venv/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Python.framework/Versions/3.7/bin

* * * * * cd /Users/Masonite/Programming/project_name && source venv/bin/activate && python craft schedule:run

获取路径

当 cron 作业运行时,它通常会使用 /bin/sh 命令而不是通常的 /bin/bash 来运行命令。因此,在机器上可能找不到craft,所以我们需要告诉cron作业应该加载的PATH。我们可以通过转到我们的项目目录并运行来简单地找到PATH:

$ env

这将显示类似以下内容的输出:

...
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
PATH=/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Python.framework/Versions/3.7/bin
PWD=/Users/Masonite/Programming/masonite
...

如果您使用虚拟环境进行开发,那么您需要在虚拟环境中运行env命令。

然后我们可以复制 PATH 并将其放入 cron 作业中。

要进入 cron,只需运行:

$ env EDITOR=nano crontab -eqcszae3zd4rfdsxs

并粘贴我们刚刚复制的PATH。一旦我们这样做了,我们的 cron 应该如下所示:

PATH=/Users/Masonite/Programming/masonitetesting/venv/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Python.framework/Versions/3.7/bin

退出nano,现在我们只需要设置实际的 cron 作业:

设置 Cron 任务

现在我们只需要设置 cron 任务本身。这就像复制它并再次将其粘贴到 nano 编辑器中一样简单。不过,您可能需要更改一些内容。

第一个* * * * *部分是必须的,基本上意味着“默认情况下每分钟运行一次”。下一部分是你应用程序的位置,这取决于你安装 Masonite 应用程序的位置。

下一部分取决于您的设置。如果您有虚拟环境,则需要通过将&& source venv/bin/activate附加到 cron 任务来激活它。如果您不在虚拟环境中运行,则可以忽略该部分。

最后,我们需要运行 schedule 命令,以便我们可以附加&& craft schedule:run

很好!现在我们有一个 cron 作业,它将每分钟运行一次 craft 命令。 Masonite 将决定需要执行哪些类。

你必须向 Masonite 调度程序注册任务。你可以在你的应用程序内轻松地完成这个步骤。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:3
讨论数量: 0
发起讨论 只看当前版本


暂无话题~