내 호스트를 통해 SSH에 액세스하고 제어판을 사용할 수 있습니다. SSH를 통해 경량 서버에 Rails를 설치했습니다. 실패하면 서버를 다시 시작하고 싶습니다. 서로 다른 버전의 Ruby에서 실행되는 두 개의 서버를 시작하고 싶기 때문에 수동으로 시작해야 할 것 같습니다.
제어판의 "Cronjob" 영역을 사용하여 이 작업을 수행할 수 있는지, 그렇다면 어떤 명령이 필요한지 알고 싶습니다.
SSH를 통해 다음과 같이 서버를 시작합니다.
cd [app1path]
bundle exec thin -C /etc/thin/app2.yml start
cd [app2path]
bundle exec thin -C /etc/thin/app2.yml start
이러한 단계는 서로 충돌하는 것처럼 보이기 때문에 순서대로 수행하는 것이 중요합니다(서비스로 실행하고, init.d
하나만 시작하고, 이상하게도 sleep 60
두 단계 중 하나에 추가해도 차이가 없지만 무엇이든).
제어판에 다음 코드를 배치해도 아무 일도 일어나지 않는 것 같습니다.
@reboot [app1path; bundle exec thin -C /etc/thin/app1.yml start; cd [app2path]; bundle exec thin -C /etc/thin/app2.yml start
무엇이 효과가 있을까요? 몇 가지 팁과 지침을 알려주시면 감사하겠습니다.
답변1
항목 은 @reboot
부팅 시 시작되지만 애플리케이션을 실행하는 데 필요한 모든 항목이 실행 중이라는 cron
의미는 아닙니다 . bundle
예를 들어 설정에 따라 해당 시점에 네트워크가 작동하지 않을 수도 있습니다.
귀하의 상황에 따라 다음을 수행합니다.
- 다시 시작 작업이 알려진 위치에 고유한 파일을 쓰도록 합니다.
- 예를 들어 X분마다 정기적으로 실행되는 일반적인 cronjob이 있습니다. 이 작업은 고유한 파일이 존재하는지, 그리고 최소 Y분 동안 지속되었는지 확인합니다.
파일이 존재하고 충분히 오래된 경우 파일이 삭제되고 번들을 시작하는 명령이 실행됩니다. 확인하면 재부팅 후 약 Y~X+Y분 동안 명령이 한 번만 시작되는지 확인할 수 있습니다. 값을 줄일 수 있습니다.)
또 다른 접근 방식은 init.d 작업을 직접 생성하고 적절한 링크를 삽입하여 필요한 모든 서비스를 시작하는 것입니다. (이 작업을 수행하는 방법 systemd
은 데비안 시스템이 사용하는 시스템 유형에 따라 다릅니다. sysvinit
)