如果在 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 作业。
祝你好运
步骤
- 在
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(...)
.
的使用
- 运行 你的 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 路由的 第三 可选部分。
- 示例控制器。
<?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/*']
]
],
// ...
];
}
我有一个名为 Buy 的控制器,它有一个 live 方法。如果使用 codeigniter,如何安装 cronjob?我用的是codeigniter 4,我用的是cpanel。
php - q /home/kuslon/kuslon/app/Controllers/Services/Buy.php
您必须做的主要事情是使用此 is_cli() 函数检查请求是否来自命令行,而不是来自控制器中的浏览器。 然后你可以在 Cpanel 中设置 cron 作业。
祝你好运
步骤
- 在
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(...)
.
- 运行 你的 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 路由的 第三 可选部分。
- 示例控制器。
<?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
.
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/*']
]
],
// ...
];
}