启动调度器
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
创建脚本文件
php artisan make:command Classname --command=yjq:test
class Classname extends Command
{
protected $signature = 'yjq:test {param_name} {--option_name=}';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
Log::info('任务调度二'.date('Y-m-d H:i:s',time()));
}
}
注册脚本
class Kernel extends ConsoleKernel
{
protected $commands = [
\App\Console\Commands\Classname::class
];
protected function scheduleTimezone()
{
return 'America/Chicago';
}
protected function schedule(Schedule $schedule)
{
$schedule->call(function (){
Log::info('任务调度一:闭包形式');
})->everyMinute();
$schedule->command('yjq:test')->everyMinute();
$schedule->command('inspire')->everyMinute();
$this->argument('param_name');
$this->option('option_name');
$schedule->command('emails:send')
->daily()
->before(function () {
})
->after(function () {
});
$schedule->command('emails:send')
->daily()
->onSuccess(function () {
})
->onFailure(function () {
});
}
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
php artisan schedule:run >> null 2>&1
php artisan yjq:test
Artisan::command('inspire', function () {
\Illuminate\Support\Facades\Log::alert('-------sfdasdf-------');
})->describe('Display an inspiring quote');
Artisan::command('build {project}', function ($project) {
\Illuminate\Support\Facades\Log::alert("Building {$project}!");
});
protected $signature = 'command:name {param_name}';
$this->argument('param_name');
protected $signature = 'command:name {--option_name=}'
$this->option('option_name');
定时任务
which php
where php
crontab -e
crontab -l
* * * * * /Applications/XAMPP/xamppfiles/bin/php /Applications/XAMPP/xamppfiles/htdocs/blog/artisan schedul:run >> /dev/null 2>&1
crontab -r
队列任务调度
$schedule->job(new Heartbeat)->everyFiveMinutes();
$schedule->job(new Heartbeat, 'heartbeats')->everyFiveMinutes();
Shell 调度命令
$schedule->exec('node /home/forge/script.js')->daily();
调度频率设置
方法 |
描述 |
->cron('* * * * *'); |
自定义 Cron 计划执行任务 |
->everyMinute(); |
每分钟执行一次任务 |
->everyFiveMinutes(); |
每五分钟执行一次任务 |
->everyTenMinutes(); |
每十分钟执行一次任务 |
->everyFifteenMinutes(); |
每十五分钟执行一次任务 |
->everyThirtyMinutes(); |
每三十分钟执行一次任务 |
->hourly(); |
每小时执行一次任务 |
->hourlyAt(17); |
每小时第 17 分钟执行一次任务 |
->daily(); |
每天午夜执行一次任务(译者注:每天零点) |
->dailyAt('13:00'); |
每天 13 点执行一次任务 |
->twiceDaily(1, 13); |
每天 1 点及 13 点各执行一次任务 |
->weekly(); |
每周执行一次任务 |
->weeklyOn(1, '8:00'); |
每周一的 8 点执行一次任务 |
->monthly(); |
每月执行一次任务 |
->monthlyOn(4, '15:00'); |
每月 4 号的 15 点执行一次任务 |
->quarterly(); |
每季度执行一次任务 |
->yearly(); |
每年执行一次任务 |
->timezone('America/New_York'); |
设置时区 |
方法 |
描述 |
->weekdays(); |
限制任务在工作日执行 |
->weekends(); |
限制任务在周末执行 |
->sundays(); |
限制任务在周日执行 |
->mondays(); |
限制任务在周一执行 |
->tuesdays(); |
限制任务在周二执行 |
->wednesdays(); |
限制任务在周三执行 |
->thursdays(); |
限制任务在周四执行 |
->fridays(); |
限制任务在周五执行 |
->saturdays(); |
限制任务在周六执行 |
->between($start, $end); |
限制任务在 $start 和 $end 区间执行 |
->when(Closure); |
限制任务在闭包返回为真时执行 |
->environments($env); |
限制任务在特定环境中执行 |
环境限制
$schedule->command('emails:send')
->daily()
->environments(['staging', 'production']);
时区
$schedule->command('report:generate')
->timezone('America/New_York')
->at('02:00')
避免任务重复
$schedule->command('emails:send')->withoutOverlapping(10);
任务只运行在一台服务器上
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
后台任务
$schedule->command('analytics:report')
->daily()
->runInBackground();
维护模式
$schedule->command('emails:send')->evenInMaintenanceMode();
任务输出
$schedule->command('emails:send')
->daily()
->sendOutputTo($filePath);
$schedule->command('foo')
->daily()
->sendOutputTo($filePath)
->emailOutputTo('foo@example.com');
$schedule->command('foo')
->daily()
->emailOutputOnFailure('foo@example.com');
Pinging 网址
$schedule->command('emails:send')
->daily()
->pingBefore($url)
->thenPing($url);
$schedule->command('emails:send')
->daily()
->pingBeforeIf($condition, $url)
->thenPingIf($condition, $url);
$schedule->command('emails:send')
->daily()
->pingOnSuccess($successUrl)
->pingOnFailure($failureUrl);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)