禁用计划作业

Disable a scheduled job

我有一个实时 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

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...
}
...
}