Skip to content

Artisan CLI

介绍

Artisan 是 Laravel 附带的命令行界面的名称。它提供了许多有用的命令供您在开发应用程序时使用。它由强大的 Symfony Console 组件驱动。

用法

列出所有可用命令

要查看所有可用的 Artisan 命令列表,您可以使用 list 命令:

php
php artisan list

查看命令的帮助屏幕

每个命令还包括一个“帮助”屏幕,显示并描述命令的可用参数和选项。要查看帮助屏幕,只需在命令名称前加上 help

php
php artisan help migrate

指定配置环境

您可以使用 --env 开关指定运行命令时应使用的配置环境:

php
php artisan migrate --env=local

显示当前 Laravel 版本

您还可以使用 --version 选项查看当前 Laravel 安装的版本:

php
php artisan --version

在 CLI 之外调用命令

有时您可能希望在 CLI 之外执行 Artisan 命令。例如,您可能希望从 HTTP 路由触发 Artisan 命令。只需使用 Artisan facade:

php
Route::get('/foo', function()
{
	$exitCode = Artisan::call('command:name', ['--option' => 'foo']);

	//
});

您甚至可以将 Artisan 命令排队,以便由您的队列工作者在后台处理:

php
Route::get('/foo', function()
{
	Artisan::queue('command:name', ['--option' => 'foo']);

	//
});

调度 Artisan 命令

过去,开发人员为他们希望调度的每个控制台命令生成一个 Cron 条目。然而,这是一件麻烦事。您的控制台计划不再在源代码控制中,您必须 SSH 到服务器以添加 Cron 条目。让我们让生活更轻松。Laravel 命令调度器允许您在 Laravel 内部流畅且富有表现力地定义命令计划,并且您的服务器上只需要一个 Cron 条目。

您的命令计划存储在 app/Console/Kernel.php 文件中。在这个类中,您将看到一个 schedule 方法。为了帮助您入门,方法中包含了一个简单的示例。您可以自由地向 Schedule 对象添加任意数量的计划作业。您需要在服务器上添加的唯一 Cron 条目是:

php
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1

这个 Cron 将每分钟调用 Laravel 命令调度器。然后,Laravel 评估您的计划作业并运行到期的作业。再简单不过了!

更多调度示例

让我们看看更多调度示例:

调度闭包

php
$schedule->call(function()
{
	// 执行一些任务...

})->hourly();

调度终端命令

php
$schedule->exec('composer self-update')->daily();

手动 Cron 表达式

php
$schedule->command('foo')->cron('* * * * *');

频繁的作业

php
$schedule->command('foo')->everyFiveMinutes();

$schedule->command('foo')->everyTenMinutes();

$schedule->command('foo')->everyThirtyMinutes();

每日作业

php
$schedule->command('foo')->daily();

在特定时间(24 小时制)每日作业

php
$schedule->command('foo')->dailyAt('15:00');

每日两次作业

php
$schedule->command('foo')->twiceDaily();

每个工作日运行的作业

php
$schedule->command('foo')->weekdays();

每周作业

php
$schedule->command('foo')->weekly();

// 为特定的日子(0-6)和时间安排每周作业...
$schedule->command('foo')->weeklyOn(1, '8:00');

每月作业

php
$schedule->command('foo')->monthly();

在特定日子运行的作业

php
$schedule->command('foo')->mondays();
$schedule->command('foo')->tuesdays();
$schedule->command('foo')->wednesdays();
$schedule->command('foo')->thursdays();
$schedule->command('foo')->fridays();
$schedule->command('foo')->saturdays();
$schedule->command('foo')->sundays();

防止作业重叠

默认情况下,即使作业的上一个实例仍在运行,计划的作业也会运行。要防止这种情况,您可以使用 withoutOverlapping 方法:

php
$schedule->command('foo')->withoutOverlapping();

在此示例中,如果 foo 命令尚未运行,则每分钟运行一次。

限制作业应运行的环境

php
$schedule->command('foo')->monthly()->environments('production');

指示即使应用程序处于维护模式也应运行作业

php
$schedule->command('foo')->monthly()->evenInMaintenanceMode();

仅当回调为真时允许作业运行

php
$schedule->command('foo')->monthly()->when(function()
{
	return true;
});

电子邮件发送计划作业的输出

php
$schedule->command('foo')->sendOutputTo($filePath)->emailOutputTo('foo@example.com');
lightbulb

您必须先将输出发送到文件,然后才能通过电子邮件发送。

将计划作业的输出发送到给定位置

php
$schedule->command('foo')->sendOutputTo($filePath);

作业运行后 Ping 给定 URL

php
$schedule->command('foo')->thenPing($url);

使用 thenPing($url) 功能需要 Guzzle HTTP 库。您可以通过在 composer.json 文件中添加以下行来将 Guzzle 5 添加到您的项目中:

php
"guzzlehttp/guzzle": "~5.0"