mybuilder/cronos-bundle

Symfony 4/5/6 组件,允许您使用 @Cron 注解来配置定时任务以运行您的控制台命令。

安装次数: 378,781

依赖项: 1

建议者: 0

安全性: 0

星标: 89

关注者: 14

分支: 15

开放问题: 12

类型:symfony-bundle

4.0.0 2023-01-06 10:45 UTC

This package is auto-updated.

Last update: 2024-09-06 14:26:08 UTC


README

Symfony 4/5/6 组件,允许您使用 @Cron 注解来配置定时任务何时运行您的控制台命令。

使用 Cronos 库来执行实际输出和更新。

安装

使用 composer 安装

运行 composer require 命令

$ composer require mybuilder/cronos-bundle

启用组件

如果您不使用 Symfony Flex,请在 config/bundles.php 中为 Symfony 4/5/6 启用组件

return [
    MyBuilder\Bundle\CronosBundle\MyBuilderCronosBundle::class => ['all' => true],
];

配置组件

您可以将以下内容添加到您的 config/packages/my_builder_cronos.yaml(Symfony 4/5/6)中来配置组件。

my_builder_cronos:
    exporter:
        key: unique-key
        mailto: cron@example.com
        path: /bin:/usr/local/bin
        executor: php
        console: bin/console
        shell: /bin/bash

使用方法

第一步是将要使用 @Cron 注解的用例添加到您想要使用的命令顶部。

use MyBuilder\Bundle\CronosBundle\Annotation\Cron;

然后,在命令类的 phpdoc 中添加 '@Cron' 注解,告诉定时任务何时运行。此示例表示它应该在 web 服务器上每 5 分钟运行一次,并且我们不希望记录任何输出。

/**
 * Command for sending our email messages from the database.
 *
 * @Cron(minute="/5", noLogs=true, server="web")
 */
class SendQueuedEmailsCommand extends Command {}

指定运行时间

定时任务的核心功能是能够指定脚本运行的时间,因此有很多选项。

您应该阅读 通用定时任务信息,以了解定时任务的一般概念和您可以在这些时间字段中使用的选项。

请注意 您不能在注解中使用 */,如果想要 */5,只需输入 /5Cronos 会自动将其转换为 */5

注解示例

构建定时任务

您应该运行 bin/console cronos:dump 并检查更新后的定时任务文件。如果一切正常,您可以通过运行以下命令来替换您的 crontab。

bin/console cronos:replace

您也可以通过指定服务器来限制包含在定时任务文件中的命令,它将只显示指定给该服务器的命令。

导出定时任务

bin/console cronos:dump --server=web
bin/console cronos:replace --server=web

环境

您可以像这样选择要在 cron 中运行的命令的环境。

bin/console cronos:replace --server=web --env=prod

故障排除

  • 当 cron 行被执行时,它将以 crontab 所在用户身份执行,但它不会执行任何用户的默认 shell 文件,因此所有路径等都需要在由 cron 行调用的命令中指定。
  • 如果您没有在 /etc/passwd 中可用的 shell,您的 crontab 不会执行。
  • 如果您的作业似乎没有运行,请检查 cron 守护进程是否正在运行,同时检查您的用户名是否在 /etc/cron.allow 中,而不是在 /etc/cron.deny 中。
  • 环境变量替换不起作用,您不能使用像 $PATH$HOME~/sbin 这样的东西。

MyBuilder 创建 - 查看我们的 博客 了解更多关于此和其他开源项目的信息。