任務排程

毛仔發表於2018-11-24
在環境中增加任務條目,使系統每分鐘執行你laravel中的任務
sudo vim /etc/crontab

在最後一行加入這句話

    * * * * * root php /var/www/Cms/artisan schedule:run >> /dev/null 2>&1

在app\Console\Commands下面是php artisan命令的檔案,現在我們也需要建立一個

php artisan make:console Test

Test.php 就可以看到了

class Test extends Command
{
/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = 'flashApi:start'; // 這裡是命令

/**
 * The console command description.
 *
 * @var string
 */
protected $description = 'Command getDataByFlashPApi';

/**
 * Create a new command instance.
 *
 * @return void
 */

protected static $newsFlashService = null;

public function __construct(NewsFlashService $newsFlashService)
{
    parent::__construct();
    self::$newsFlashService = $newsFlashService;
}

/**
 * Execute the console command.
 *
 * @return mixed
 */
public function handle()
{
    $this->getDataByTemApi();
}

/**
 * 介面資料獲取
 *
 * @return array
 * @author jacklin
 */
public function getDataByTemApi()
{
    // 介面開關 預設為true
    $switch = Redis::get('STRING:FLASH:SWITCH:STATUS');
    if ($switch==2) return Common::returnResponse(411);

    // 執行自動新增介面
    $res = self::$newsFlashService->addDataByTemApi();
    Log::info('=======>快訊介面本次請求新增的資料條數為:');
    Log::info($res);
}
}

建立好這個檔案,在根目錄再執行php artisan 就可以看到我們這個命令,以及命令描述
然後,我們需要用linux的任務排程來執行這個命令,做法就是在app\Console\Kernel.php中註冊這條命令,以及規定這條命令的執行頻次。

class Kernel extends ConsoleKernel
{
/**
 * The Artisan commands provided by your application.
 *
 * @var array
 */
protected $commands = [
   Commands\Test::class,
];

/**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    $schedule->command('flashApi:start')->everyMinute();// 定義命令每分鐘執行
}
}

值得一說的是$schedule 不只有執行命令的command()方法,還有call()方法來執行某個控制器的某方法;

mac下面,不能用環境變數, 要寫php 命令的絕對命令

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章