禁用计划作业

Posted

技术标签:

【中文标题】禁用计划作业【英文标题】:Disable a scheduled job 【发布时间】:2022-01-01 05:21:02 【问题描述】:

我有一个包含多个预定作业的实时 php/Laravel 项目, 客户要求禁用其中一项工作, 有没有办法通过命令行禁用其中一个计划作业?

当然,我可以注释掉 console\kernel.php 中注册任务的代码,但这只是暂时的,我不想只为这一项任务进行代码更改和发布。

+-------------+-----------------------------------------------+
| Cron        | Command                                       |
+-------------+-----------------------------------------------+
| 0 23 * * 7  | 'artisan' export:blahblah                  |
| 0 1 5 * *   | 'artisan' invoices:somejob          | <---- i want to disable just this one job
| 30 1 * * *  | 'artisan' invoices:blahblahblah         |

【问题讨论】:

【参考方案1】:

您可以配置一个全局变量或数据库标志,每次在运行命令逻辑之前都会检查它。

例如:

<?php

class InvoicesCommand 
...

// handles invoices:somejob command
public function handle() 
    // get command flag (can be set from .env too, or however you want)
    $invoicesCommandFlag = Configuration::where('key', 'invoices_command_flag')->firstOrFail();

    // check if command is "enabled"
    if (!$invoicesCommandFlag->value) 
        \Log::debug('Command disabled. Aborting.');
        return;
    

    // do stuff...

...

【讨论】:

谢谢,这确实有效。我们确实已经有一个全局覆盖,我想我必须为每个时间表构建一个,感觉就像我忽略的工匠 cli 中应该有一些东西可以在不更改代码的情况下做到这一点! @AidenFry 据我所知,没有办法禁用命令执行。我建议您创建不同的参数以从 db 启用/禁用它们。 感谢赞赏。

以上是关于禁用计划作业的主要内容,如果未能解决你的问题,请参考以下文章

保持 SCDF 中的计划作业执行,直到上一个作业执行完成

PHP:运行计划作业(cron 作业)

如何为作业禁用 GitLab 构建缓存

如何使用 dbms_scheduler 在 oracle 中禁用作业

Centos进程作业管理与计划任务

作业三