일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- git
- nginx
- nodejs
- netfunnel
- Laravel
- chatGPT
- polygon
- node
- pagination
- threejs
- 발행
- PM2
- Kaikas
- Setting
- NextJS
- 공연티켓
- Python
- metamask
- Remix
- nft
- miniconda
- 라라벨
- 배포
- 회고
- 블록체인
- Ai
- React
- CSS
- jquery
- exceljs
- Today
- Total
박주니 개발 정리
schedule 사용 방법 및 설명 본문
laravel schedule은 crontab에서 체크하는 시간 단위로 조건을 실행할 때 사용합니다. 주로 자동화할 때 이용합니다.
laravel 환경을 다 구축했다는 전제 조건하에 진행하겠습니다. git bash, powershell에서 homestead 위치에서 vagrant ssh까지 진행해주시길 바랍니다.
crontab 설정 방법
1. crontab -e을 입력해주시고 하단에 */1 * * * * cd [nginx 설정한 root 위치] && php artisan schedule:run >> /dev/null 2>&1을 입력해주시길 바랍니다.
2. 엔터를 누르고 ctrl+x 를 눌러서 하단에 Save modified buffer 이 나오는 것을 확인합니다. 그 다음 y를 눌러서 File Name to Write가 나오면 엔터를 누르시면 됩니다.
3. crontab -l 을 눌러서 제대로 설정되었는 지 확인합니다.
- [nginx 설정한 root 위치]
- laravel이 정상적으로 돌아간다는 것은 nginx을 정상적으로 연결되었다는 가정하에 nginx 설정한 root 위치를 보기 위해서는 상단에 이미지에 보이는 vagrant ssh까지만 접속한 위치에서 cd /etc/nginx/sites-available을 접속합니다.
- ls를 입력 후 스케줄러를 진행할 백엔드 경로를 찾습니다. 저는 crypto_admin_backend을 연결했습니다.(2-1 이미지 참조)
- sudo vi crypto_admin_backend로 들어가서 설정한 내용을 확인합니다. 지금 보시는 분은 설정한 위치로 변경해서 들어가시면 됩니다. (2-2 이미지 참조)
- root 경로에서 연결 부위까지가 crontab에 root입니다. 예를 들면 현재 2-2에 보이는 이미지에서 /home/vagrant/code/crypto-admin-backend 까지 입니다.
- laravel이 정상적으로 돌아간다는 것은 nginx을 정상적으로 연결되었다는 가정하에 nginx 설정한 root 위치를 보기 위해서는 상단에 이미지에 보이는 vagrant ssh까지만 접속한 위치에서 cd /etc/nginx/sites-available을 접속합니다.
- php artisan schedule:run >> /dev/null 2>&1
- 1분 단위로 스케줄을 진행한다는 의미인데 정확한 내용은 라라벨 공식문서에서 확인하시면 됩니다.
- https://laravel.kr/docs/8.x/scheduling
crontab 설정이 완료되었으면 laravel에서 schedule 설정을 진행합니다.
1. App\Console\Commands 에서 Schedule 설정할 class를 설정합니다.
- 하단에 코드는 기본 form 입니다. 여기서 수정할 부분은 signature 입니다. kernel.php에서 체크 진행할 때 signature name 을 확인하기 때문입니다.
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Config;
class CheckTest extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'checktest:store';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Check Test List';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// 1분단위로 체크할 함수 설정
}
}
2. App\Console 에서 Kernel.php에 현재 schedule class를 연결합니다.
- use 에 연결하고자하는 shedule class를 설정합니다.
- protected $commands 에 use에 설정한 class 를 연결합니다.
- protected function schedule에는 commend에는 아까 schedule class에 protected $signature 네이밍을 맞춰서 연결합니다.
- appendOutputTo에는 log 가 출력되는 부분임으로 해당 signature 네이밍에 맞춰서 logs/schedule_(signature 네이밍)을 넣으시면 됩니다.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Console\Commands\CheckTest;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
CheckTest::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// signature 연결
$schedule->command('checktest:store')->everyMinute()->appendOutputTo(storage_path('logs/schedule_checktest.log'));
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
3. kernel 설정이 완료되었으면 schedule class에 handle 에 기본적으로 Log::info("test!!!")를 넣어서 어떻게 돌아가는 지 확인하시길 바랍니다.
- 정상적으로 연결되었다면 1분 단위로 Log에서 test!!!가 나오는 것을 확인할 수 있을 것입니다. 만약 나오지 않는다면 연결하는 부분에 문제가 있을 수 있으므로 다시 확인해주시길 바랍니다.
느낀점
schedule은 여러가지로 유용하게 사용이 됩니다. 예를 들어서 해당 상품이 종료일이 지났을 경우 그 이후에 이벤트를 진행할 때 직접 접속하지 않아도 계속 1분 단위로 돌아가고 있어서 자동으로 처리되는 것을 볼 수 있습니다.
관리자 입장에서는 파트를 나눠서 schedule을 설정하면 효율적이게 관리할 수 있음을 느낄 수 있었습니다.
추후에 현업에서 라라벨 schedule을 이용했는 지 공유하겠습니다.