mybuilder / cronos-bundle
Symfony 4/5/6 组件,允许您使用 @Cron 注解来配置定时任务以运行您的控制台命令。
Requires
- php: >=8.0.2
- doctrine/annotations: ^1.11
- mybuilder/cronos: ^3.0 || ^4.0
- symfony/config: ^4.4.20 || ^5.4 || ^6.0
- symfony/console: ^4.4.20 || ^5.4 || ^6.0
- symfony/dependency-injection: ^4.4.20 || ^5.4 || ^6.0
- symfony/framework-bundle: ^4.4.20 || ^5.4 || ^6.0
- symfony/http-kernel: ^4.4.20 || ^5.4 || ^6.0
- symfony/property-access: ^4.4.20 || ^5.4 || ^6.0
- symfony/yaml: ^4.4.20 || ^5.4 || ^6.0
Requires (Dev)
- phpunit/phpunit: ^9.5.27
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
,只需输入 /5
,Cronos 会自动将其转换为 */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
这样的东西。