BASH/Linux: 항상 명령을 시작하거나 재시도하시겠습니까?

BASH/Linux: 항상 명령을 시작하거나 재시도하시겠습니까?

docker-compose up내 특정 사용 사례에서는 여러 애플리케이션에 대한 재시도 논리를 제공하고 싶습니다 .

기어를 바꾸고 사용하기 쉬운 CDN 인프라로 이동할 때 셸 명령을 실행하여 단일 Docker 컨테이너에서 모든 것을 시작하는 것이 더 간단해 보입니다.

그러나 "항상 작동" 논리에 해당하는 유일한 것은 다음과 같습니다.

while true; do start-app || sleep 1; done

이 시스템 수준 작업의 유용한 기능 외에도 실제로 명령이 항상 실행되도록 하는 일종의 Unix/BASH "재시도" 도구가 있는지 궁금합니다.

답변1

시스템을 이용하실 수 있습니다.

예를 들어 파일을 생성합니다./etc/systemd/system/yourapplication.service

[Unit]
Description=Your Super application
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s

ExecStart=/path/to/application

[Install]
WantedBy=multi-user.target

또는 이전 방식은 init을 사용하여 애플리케이션을 시작하는 것입니다.

초기화 스크립트에 한 줄 추가

ap:2345:respawn:/bin/sh /somewhere/start-app

ap서비스 ID(최대 2자)

2345이 항목이 적용되는 실행 수준을 나열합니다.

  • 2 다중 사용자 모드는 네트워크 인터페이스를 구성하거나 데몬을 시작하지 않습니다.
  • 3. 네트워크를 사용하여 다중 사용자 모드에서 시스템을 정상적으로 시작합니다.
  • 4 정의되지 않음 사용되지 않음/사용자 정의 가능
  • 런레벨 3 + 디스플레이 관리자(X)인 5 X11

respawn행동을 위해

그런 다음 명령을 실행하십시오.

관련 정보