You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> {note} `dispatch` 헬퍼 함수와 `Dispatchable` 클래스의 `dispatch` 메소드는 job을 큐에 배치하기 위해 가비지 콜렉션에 의존합니다. 따라서, tinker를 사용할 때는 `Bus::dispatch` 또는 `Queue::push`를 사용하여 job을 전달해야 합니다.
82
+
> **Warning**
83
+
> `dispatch` 헬퍼 함수와 `Dispatchable` 클래스의 `dispatch` 메소드는 job을 큐에 배치하기 위해 가비지 콜렉션에 의존합니다. 따라서, tinker를 사용할 때는 `Bus::dispatch` 또는 `Queue::push`를 사용하여 job을 전달해야 합니다.
명령어를 생성 한 후 클래스의 `signature`와 `description` 속성에 적절한 값을 지정해줘야합니다. 이 속성은 화면에 `list` 명령을 표시 할 때 사용됩니다. `signature` 속성을 사용하면 [명령어의 입력 기대 값](#defining-input-expectations)을 정의 할 수도 있습니다. 명령어가 실행되면 `handle` 메소드가 호출됩니다. 이 메소드에 실행할 로직들을 작성하면 됩니다.
> 이 기능을 활용하기 위해서는 여러분의 애플리케이션이 `memcached`, `redis`, `dynamodb`, `database`, `file`, 또는 `array` 캐시 드라이버를 애플리케이션 기본 캐시 드라이버로 사용해야 합니다. 또한 모든 서버는 같은 중앙 캐시 서버와 통신해야 합니다.
212
+
213
+
한 번에 하나의 명령 인스턴스만 실행시키고 싶을 수 있습니다. 그렇게 하려면 여러분의 명령 클래스에 `Illuminate\Contracts\Console\Isolatable` 인터페이스를 구현하면 됩니다.
214
+
215
+
<?php
216
+
217
+
namespace App\Console\Commands;
218
+
219
+
use Illuminate\Console\Command;
220
+
use Illuminate\Contracts\Console\Isolatable;
221
+
222
+
class SendEmails extends Command implements Isolatable
223
+
{
224
+
// ...
225
+
}
226
+
227
+
명령이 `Isolatable`로 표시되면 Laravel은 자동으로 명령에 `--isolated` 옵션을 추가합니다. 해당 옵션과 함께 명령이 호출되면 라라벨은 해당 명령의 다른 인스턴스가 이미 실행되고 있지 않은지 확인합니다. 라라벨은 애플리케이션의 기본 캐시 드라이버를 사용하여 원자적 잠금을 획득하려고 시도하여 이를 수행합니다. 명령의 다른 인스턴스가 실행 중인 경우 명령이 실행되지 않습니다. 그러나 명령은 성공적인 종료 상태 코드와 함께 계속 종료됩니다.
228
+
229
+
```shell
230
+
php artisan mail:send 1 --isolated
231
+
```
232
+
233
+
실행이 불가능할 때 특정 종료 상태 코드를 반환하길 원하면 `isolated` 옵션을 통해 원하는 상태 코드를 전달할 수 있습니다.
234
+
235
+
```shell
236
+
php artisan mail:send 1 --isolated=12
237
+
```
238
+
239
+
<aname="lock-expiration-time"></a>
240
+
#### 잠금 만료 시간
241
+
242
+
기본적으로 격리 잠금은 커맨드가 종료되면 해제됩니다. 명령이 중단되고 종료되지 못하는 경우에는 한 시간 뒤에 만료됩니다. 명령에 `isolationLockExpiresAt` 메서드를 정의해서 잠금 만료 시간을 조정할 수 있습니다.
243
+
244
+
```php
245
+
/**
246
+
* Determine when an isolation lock expires for the command.
247
+
*
248
+
* @return \DateTimeInterface|\DateInterval
249
+
*/
250
+
public function isolationLockExpiresAt()
251
+
{
252
+
return now()->addMinutes(5);
253
+
}
254
+
```
255
+
204
256
<aname="defining-input-expectations"></a>
205
257
## 입력 값들 정의하기
206
258
@@ -288,10 +340,10 @@ php artisan mail:send 1 -Q
288
340
289
341
'mail:send {user*}'
290
342
291
-
이 함수를 호출 할 때, 명령 행에 `user` 인자를 순서대로 전달할 수 있습니다. 예를 들어 다음 명령어는 `user` 값을 `foo`와 `bar` 값을 가진 배열로 만들어 줍니다.
343
+
이 함수를 호출 할 때, 명령 행에 `user` 인자를 순서대로 전달할 수 있습니다. 예를 들어 다음 명령어는 `user` 값을 `1`와 `2` 값을 가진 배열로 만들어 줍니다.
292
344
293
345
```shell
294
-
php artisan mail:send foo bar
346
+
php artisan mail:send 1 2
295
347
```
296
348
297
349
`*`문자는 0개 이상의 인자를 입력받기 위해 선택적인 인자 정의와 함께 사용 할 수 있습니다.
@@ -303,7 +355,7 @@ php artisan mail:send foo bar
303
355
304
356
여러 입력 값을 예상하는 옵션을 정의 할 때, 명령에 전달 된 각 옵션 값은 옵션 이름으로 시작해야합니다.
아티즌 콘솔을 구동하는 Symfony 콘솔 구성 요소를 사용하면, 명령어가 실행되는 동안 프로세스 시그널을(있을 경우) 처리 할 수 있습니다. 예를 들어 명령어가 `SIGINT` and `SIGTERM` 신호를 처리할 수 있습니다.
618
-
619
-
사용하려면 아티즌 명령어 클래스에서 `Symfony\Component\Console\Command\SignalableCommandInterface` 인터페이스를 구현해야합니다. 이 인터페이스를 상속받은 경우 `getSubscribedSignals` 및 `handleSignal`의 두 가지 메소드를 구현해야합니다.
620
-
621
-
```php
622
-
<?php
623
-
624
-
use Symfony\Component\Console\Command\SignalableCommandInterface;
625
-
626
-
class StartServer extends Command implements SignalableCommandInterface
627
-
{
628
-
// ...
629
-
630
-
/**
631
-
* Get the list of signals handled by the command.
632
-
*
633
-
* @return array
634
-
*/
635
-
public function getSubscribedSignals(): array
636
-
{
637
-
return [SIGINT, SIGTERM];
638
-
}
670
+
아시다시피 운영 체제는 실행 중인 프로세스에 시그널을 보낼 수 있습니다. 예를 들어, `SIGTERM` 신호는 운영 체제가 프로그램을 종료하도록 요청하는 방법입니다. 여러분의 아티즌 콘솔 명령에서 이러한 신호를 수신하고 이에 따라 코드를 실행하고 싶다면 `trap` 메서드를 사용하면 됩니다.
0 commit comments