【问题标题】: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         |

【问题讨论】:

    标签: php laravel schedule laravel-artisan


    【解决方案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 启用/禁用它们。
    • 感谢赞赏。
    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 2010-09-19
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多