在windows系統中我們通常使用系統自帶的
計劃任務
來執行定時任務,在Linux系統中我們通常配合crontab使用shell
指令碼或者訪問url
來完成定時任務,laravel的command在Linux中使用很方便,並且laravel中的command也提供了多種時間排程方法。
執行:php artisan make:command Luckinman
命令,會在app\console\commands
命令下生成一個Luckinman.php
的檔案。
其中:
$signature
為這個類定義一個執行名稱。$description
為這個類增加資訊描述。handle
方法中寫自己的業務邏輯。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Model\Student;
use Illuminate\Support\Facades\Log;
class Luckinman extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'test';
/**
* The console command description.
*
* @var string
*/
protected $description = 'this is test';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
try {
Log::info('測試定時任務:'.date('Y-m-d H:i:s'));
}catch (\Exception $e){
Log::info($e->getMessage());
}
}
}
在控制檯中執行該類的handle
方法,使用命令:php artisan test
即可。其中test
為$signature
中定義的名稱。
在commands
同級目錄下有一個kernal.php
:
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\Luckinman::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('test')->everyFiveMinutes();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
在$commands
屬性裡引入我們建立的定時測試類,並在schedule
方法中進行配置任務排程時間。
其中everyFiveMinutes
代表每分鐘執行一次。
例如,一分鐘執行一次:
* * * * * /www/server/php/73/bin/php /www/wwwroot/lars.wangchuangcode.cn/artisan schedule:run >> /dev/null 2>&1
其中,/www/server/php/73/bin/php
是我php的執行配置檔案所在路徑,根據自己的填寫。/www/wwwroot/lars.wangchuangcode.cn/
是我的專案根目錄。
至此,command定時排程配置成功。
如果想把crontab每次執行記錄到日誌中,在後面指定一個檔案即可:* * * * * /www/server/php/73/bin/
php /www/wwwroot/lar.wangchuangcode.cn/artisan schedule:run >> /dev/null 2>&1 >> /www/wwwroot/1.txt
本作品採用《CC 協議》,轉載必須註明作者和本文連結