아티즌(Artisan)은 라라벨에 포함되어 있는 커맨드라인 인터페이스 이름입니다. 아티즌은 어플리케이션을 개발 하는 동안 도움이 되는 몇가지의 커맨드를 제공합니다. 아티즌은 강력한 심포니 콘솔 컴포넌트에 의해 구동 됩니다.
list
커맨드를 사용하여 사용 가능한 모든 아티즌 커맨드 리스트를 볼 수 있습니다:
php artisan list
모든 커맨드는 사용 가능한 인수들과 옵션들을 보여주고 설명해주는 "도움말" 화면을 포함하고 있습니다. 간단히 커맨드 이름 앞에 help
를 붙여 도움말 화면을 볼 수 있습니다:
php artisan help migrate
--env
스위치를 사용하여 커맨드를 실행하는 동안 사용될 구성 환경을 지정 할 수 있습니다:
php artisan migrate --env=local
또한 --version
옵션을 사용하여 현재 설치된 라라벨의 버전을 볼 수도 있습니다:
php artisan --version
때때로 아티즌 커맨드를 CLI 밖에서 호출하기를 원할 경우도 있습니다. 예를 들어, HTTP 라우트에서 아티즌 커맨드를 실행하기를 원할 경우도 있을겁니다. 이럴 경우엔 Artisan
파사드를 사용하세요:
Route::get('/foo', function()
{
$exitCode = Artisan::call('command:name', ['--option' => 'foo']);
//
});
또한 백그라운드에서 큐 워커에 의해 실행되도록 아티즌 커맨들을 대기열에 등록 할 수도 있습니다.:
Route::get('/foo', function()
{
Artisan::queue('command:name', ['--option' => 'foo']);
//
});
과거에 개발자는 크론을 생성하여 각각의 콘솔 커맨드들을 스케쥴화 시켰습니다. 하지만, 이는 골치 아픕니다. 콘솔 스케쥴은 소스 컨트롤에 포함되어 있지도 않으며, 크론을 등록하려면 SSH를 통하여 서버에 접속해야만 합니다. 이제 우리의 삶을 편하게 만들어 봅시다. 라라벨 커맨드 스케쥴러는 우아하고 풍부하게 라라벨 자체에 커맨드 스케쥴을 정의 할수 있도록 해주며, 서버에 단 하나의 크론 엔트리만을 필요로 합니다.
커맨드 스케쥴은 app/Console/Kernel.php
파일에 위치해 있습니다. 이 클래스에서 schedule
메서드를 볼수 있습니다. 당신이 쉽게 시작할수 있도록 도와주는 간단한 예제가 포함되어 있습니다. Schedule
객체에 원하는 만큼의 스케쥴 작업을 추가할 수 있습니다. 서버에 등록하는 유일한 크론 엔트리는 아래와 같습니다:
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
이 크로는 라라벨 커맨드 스케쥴러를 매분마다 호출합니다. 그런 다음, 라라벨이 각각의 스케쥴 작업들을 평가하여 기한된 작업들을 실행합니다. 이것보다 더 쉬울순 없습니다!
몇개의 스케쥴링 예제를 더 보도록 하겠습니다:
$schedule->call(function()
{
// Do some task...
})->hourly();
$schedule->exec('composer self-update')->daily();
$schedule->command('foo')->cron('* * * * *');
$schedule->command('foo')->everyFiveMinutes();
$schedule->command('foo')->everyTenMinutes();
$schedule->command('foo')->everyThirtyMinutes();
$schedule->command('foo')->daily();
$schedule->command('foo')->dailyAt('15:00');
$schedule->command('foo')->twiceDaily();
$schedule->command('foo')->weekdays();
$schedule->command('foo')->weekly();
// 특정 요일과 시간마다 실행되는 주간 작업 스케쥴화
$schedule->command('foo')->weeklyOn(1, '8:00');
$schedule->command('foo')->monthly();
$schedule->command('foo')->mondays();
$schedule->command('foo')->tuesdays();
$schedule->command('foo')->wednesdays();
$schedule->command('foo')->thursdays();
$schedule->command('foo')->fridays();
$schedule->command('foo')->saturdays();
$schedule->command('foo')->sundays();
기본적으로, 스케쥴된 작업들은 이전의 작업 인스턴스가 계속 실행중인 상태라도 실행됩니다. 이를 방지하려면, withoutOverlapping
메서드를 사용합니다:
$schedule->command('foo')->withoutOverlapping();
이 예제에서, foo
커맨드는 이미 실행되어 있지 않을 경우에만 매분마다 실행됩니다.
$schedule->command('foo')->monthly()->environments('production');
$schedule->command('foo')->monthly()->evenInMaintenanceMode();
$schedule->command('foo')->monthly()->when(function()
{
return true;
});
$schedule->command('foo')->sendOutputTo($filePath)->emailOutputTo('foo@example.com');
주의: 이메일로 보내기 전에 먼저 파일로 저장해야합니다.
$schedule->command('foo')->sendOutputTo($filePath);
$schedule->command('foo')->thenPing($url);
thenPing($url)
기능을 사용하려면 Guzzle HTTP 라이브러리가 필요합니다. 다음의 라인을 composer.json
파일에 추가하여 Guzzle 5를 여러분의 프로젝트에 추가 할 수 있습니다:
"guzzlehttp/guzzle": "~5.0"