facebook twitter hatena line email

Php/laravel/laravel5/バッチ

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

バッチ作成

$ php artisan make:console Robots --command="robots"

作られたバッチファイル

$ vi app/Console/Commands/Robots.php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Robots extends Command
{
   /**
    * The name and signature of the console command.
    *
    * @var string
    */
   protected $signature = 'robots';
   /**
    * The console command description.
    *
    * @var string
    */
   protected $description = 'Command description';
   /**
    * Create a new command instance.
    *
    * @return void
    */
   public function __construct()
   {
       parent::__construct();
   }
   /**
    * Execute the console command.
    *
    * @return mixed
    */
   public function handle()
   {
       echo "robots";
   }
}

バッチ本体に追加

Commands\Robots::class,を追加

$ vi app/Console/Kernel.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 = [
       // Commands\Inspire::class,
+        Commands\Robots::class,
   ];

実行

$ php artisan robots
robots

バッチのスケジュールを追加したい場合

$ crontab -e
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
$ vi app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
   $schedule->command('robots')
       ->cron('*/5 * * * * *');
}

参考:https://readouble.com/laravel/5/1/ja/scheduling.html

参考:http://blog.takahash.com/entry/2014/12/08/Laravel5_%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E7%99%BB%E9%8C%B2%E3%81%A8%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

スケジュールの種類

->cron('* * * * * *'); 	CRON記法によるスケジュール
->everyMinute(); 	毎分タスク実行
->everyFiveMinutes(); 	5分毎にタスク実行
->everyTenMinutes(); 	10分毎にタスク実行
->everyThirtyMinutes(); 	30分毎にタスク実行
->hourly(); 	毎時タスク実行
->daily(); 	毎日深夜12時に実行
->dailyAt('13:00'); 	毎日13:00に実行
->twiceDaily(1, 13); 	毎日1:00と13:00時に実行
->weekly(); 	毎週実行
->monthly(); 	毎月実行
->yearly(); 	毎年実行

アウトプットした場合

出力

   $schedule->command('robots')
       ->cron('*/5 * * * * *')
       ->sendOutputTo('/tmp/robots.log');

追加出力

   $schedule->command('robots')
       ->cron('*/5 * * * * *')
       ->appendOutputTo('/tmp/robots.log');

2重起動防止

$schedule->command('hogehoge')->withoutOverlapping();

withoutOverLapping()の部分

ロックファイルは以下にある

ls storage/framework/schedule-*