一:
app\Console\Commands目录下创建脚本文件TestConsole.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Base\CommonPoolMethod;
//连接数据库可引入数据库相关类
class TestConsole extends Command
{
use CommonPoolMethod;
/**
* The name and signature of the console command.
* update:artisan下命令组,可使用【php artisan -v】或【php artisan list】查看
* test_function :解释命令作用(随意)
* 完整命令【php artisan update:test_function】
* @var string
*/
protected $signature = 'update:test_function';
/**
* The console command description.
*
* @var string
*/
protected $description = "更新测试方法";
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
public function handle()
{
//编写脚本方法
}
}
二:Console\Kernel.php文件中引入命令
//新增【必须】
use App\Console\Commands\TestConsole;
protected $commands = [
//新增【必须】
TestConsole::class,
];
//定时任务【可选,定时任务时添加】
protected function schedule(Schedule $schedule)
{
//每天1点执行一次
$schedule->command('update:test_function')->dailyAt('1:00');
}
三:测试任务是否成功【php artisan list】
列出全部任务命令,若存在【update:test_function】命令,证明任务创建成功;若不存在,证明创建失败
四:laravel根目录下执行artisan命令【php artisan update:test_function】
注:执行命令报错【SQLSTATE[HY000] [2002] No such file or directory 】
原因:未找不到mysql.sock文件
解决:
1:打开MySQL管理工具,执行sql语句 【show variables like ‘%sock%’】,得到一个目录【/Applications/MAMP/tmp/mysql/mysql.sock】
2:找到 ./config/database.php 中的 unix_socket,修改【‘unix_socket’ => ‘/Applications/MAMP/tmp/mysql/mysql.sock’】
或者
.env中对应的DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
五:定时任务相关:
->cron('* * * * *'); 自定义 Cron 计划执行任务
->everyMinute(); 每分钟执行一次任务
->everyFiveMinutes(); 每五分钟执行一次任务
->everyTenMinutes(); 每十分钟执行一次任务
->everyFifteenMinutes(); 每十五分钟执行一次任务
->everyThirtyMinutes(); 每三十分钟执行一次任务
->hourly(); 每小时执行一次任务
->hourlyAt(17); 每小时第 17 分钟执行一次任务
->daily(); 每天 0 点执行一次任务
->dailyAt('13:00'); 每天 13 点执行一次任务
->twiceDaily(1, 13); 每天 1 点及 13 点各执行一次任务
->weekly(); 每周日 0 点执行一次任务
->weeklyOn(1, '8:00'); 每周一的 8 点执行一次任务
->monthly(); 每月第一天 0 点执行一次任务
->monthlyOn(4, '15:00'); 每月 4 号的 15 点 执行一次任务
->quarterly(); 每季度第一天 0 点执行一次任务
->yearly(); 每年第一天 0 点执行一次任务
->timezone('America/New_York'); 设置时区
->weekdays(); 限制任务在工作日执行
->weekends(); 限制任务在周末执行
->sundays(); 限制任务在周日执行
->mondays(); 限制任务在周一执行
->tuesdays(); 限制任务在周二执行
->wednesdays(); 限制任务在周三执行
->thursdays(); 限制任务在周四执行
->fridays(); 限制任务在周五执行
->saturdays(); 限制任务在周六执行
->between($start, $end); 限制任务在 $start 和 $end 区间执行->hourly()->between('7:00', '22:00');
->when(Closure); 限制任务在闭包返回为真时执行
->environments($env); 限制任务在特定环境执行
->withoutOverlapping(); 避免任务重复执行
六:服务器启动定时任务
#列出全部任务
crontab -l
#编辑任务
crontab -e
#新增以下任务
#每分钟执行一次
#/www/server/php/73/bin/php 【php 的运行配置文件所在路径】
#/www/project【项目根目录】
* * * * * /www/server/php/73/bin/php /www/project/artisan schedule:run >> /dev/null 2>&1