Laravel 开发console程序非常方便,其模式与其他框架,如yii类似。本文参考了 Laravel 5.5 文档 详细信息请参考之。注:本文是基于Laravel 5.5的版本编写请注意。
一、crontab 了解
Cron 是Linux下的定时器工具,可以方便执行定时任务。其格式大致如:
注:简单的记成:分、时、日、月、周,通配符*配合位置表示任意值(如每分钟、每小时等)
1.cron相关命令
# 显示一个cron列表,其内容是由当前用户启动的任务
crontab -l
# 编辑自己的cron列表
crontab -e
2. 简单的栗子
* * * * * /path/php artisan myCommand # 每分钟执行
*/1 * * * * /path/php artisan myCommand # 每分钟执行,同上
*/5 * * * * /path/php artisan myCommand # 每5分钟执行
10,20 * * * * /path/php artisan myCommand # 每小时10分、20分时执行
1-31,35 * * * * /path/php artisan myCommand # 每小时1至31分、35分执行
0 */2 * * 0 /path/php artisan myCommand param1 param2 # 复杂点的例子,你能看懂吗?
生成环境下需要加上 &> /dev/null
* * * * * /path/php artisan myCommand &> /dev/null
这样做会直接丢弃cron任务的console输出,可以减少系统资源开销
3.复杂点的栗子
有时候我们觉得每分钟执行一次间距太大了,我想改成每20秒中执行,那该怎么写?
# 请参考这个栗子
* * * * * /path/php artisan myCommand
* * * * * sleep 20 ; /path/php artisan myCommand
* * * * * sleep 40 ; /path/php artisan myCommand
#看到这里你应该秒懂了,其实就是延时20秒启动一次即可
二、Laravel 控制台 官方手册:https://laravelacademy.org/post/9562.html
这里假装你已经熟悉(起码得了解)artisan的使用,比如:
# 列出可用的命令
php artisan list
1.通过laravel提供的基础命令来生成一个Command,如:
php artisan make:command WelcomeMessage
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class WelcomeMessage extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'welcome:message';
/**
* The console command description.
*
* @var string
*/
protected $description = '打印欢迎信息';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$name = $this->ask('你叫什么名字');
$city = $this->choice('你来自哪个城市', [
'北京', '杭州', '深圳','武汉'
], 0);
$this->info('Display this on the screen');
$password = $this->secret('输入密码才能执行此命令');
if ($password != '123') {
$this->question('密码错误');
exit(-1);
}
if ($this->confirm('确定要执行此命令吗?')) {
Db::table('users')->insert(['name'=>$name,'city'=>$city,'email'=>$name.'@163.com','password'=>bcrypt('123')]);
$this->info('欢迎来自' . $city . '的' . $name . '访问 Laravel 学院');
} else {
exit(0);
}
}
}
3.打开 App\Console\Kernel.php
protected $commands = [
//
\App\Console\Commands\WelcomeMessage::class,
];
4.测试
php Artisan welcome:message