如果在 cpanel 中使用 codeigniter,如何设置 cron 作业?

how to set cron job if using codeigniter in cpanel?

我有一个名为 Buy 的控制器,它有一个 live 方法。如果使用 codeigniter,如何安装 cronjob?我用的是codeigniter 4,我用的是cpanel。

php - q /home/kuslon/kuslon/app/Controllers/Services/Buy.php

您必须做的主要事情是使用此 is_cli() 函数检查请求是否来自命令行,而不是来自控制器中的浏览器。 然后你可以在 Cpanel 中设置 cron 作业。

祝你好运

步骤

  1. app/Config/Routes.php 中创建一条 command-line 路线。即:
$routes->setDefaultNamespace('App\Controllers');
$routes->setAutoRoute(false);
// ...

$routes->cli("cli/ship-product/(:segment)", "Services\Buy::ship/");

// ...

其中:

cli/ship-product/(:segment) - 代表您的路线。 (:segment) 可选的 取决于您的控制器方法是否需要参数。

Buy - 代表您的控制器。

ship - 表示您的控制器方法。

</code> - 表示可选 <code>(:segment) 转发到第一个 Controller 方法的参数,如果它需要的话。如果您的 Controller 方法不需要任何参数,您可以省略它。

注意 CLI-only routing with the help of ->cli(...).

的使用
  1. 运行 你的 cron 作业。
/usr/local/bin/php -q /home/kuslon/kuslon/public/index.php cli ship-product "ed053cb1-29a4-42f2-a17e-3109fa4d80fe"

其中:

-q - 表示 quiet-mode。抑制 HTTP header 输出。

/home/kuslon/kuslon/public/index.php - 表示项目 index.php 文件的绝对路径。这假定路径中的第一个 kuslon 代表您的 Cpanel 用户名,第二个 kuslon 代表您的项目根文件夹.

cli - 表示您之前定义的 command-line 路由的 first 部分。

ship-product - 表示 command-line 路线的 second 部分。

"ed053cb1-29a4-42f2-a17e-3109fa4d80fe" - 表示您的控制器方法可能需要的 command-line 路由的 第三 可选部分。

  1. 示例控制器。
<?php

namespace App\Controllers\Services;

use App\Controllers\BaseController;

class Buy extends BaseController
{

    public function ship(string $uuid)
    {
//        echo  "{$uuid}";
    }

}

资源:Running via the Command Line

附录:

如果您的所有路由都通过身份验证过滤器,您可能希望排除 app/Config/Filters.php 中这些基于command-line 的路由。即:您可能会在下面注意到,我从 authfilter.

excluded all routes starting with cli/*
<?php

namespace Config;

use App\Filters\AuthenticationFilter;
use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    // ...
    public $aliases = [
        //...
        'authfilter' => AuthenticationFilter::class
    ];

    public $globals = [
        'before' => [
            //...
            'authfilter' => [
                'except' => ['cli/*']
            ]
        ],
        // ...
    ];
}