재부팅 시 명령을 실행하기 위해 CronJob을 만드는 방법은 무엇입니까?

재부팅 시 명령을 실행하기 위해 CronJob을 만드는 방법은 무엇입니까?

내 호스트를 통해 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예를 들어 설정에 따라 해당 시점에 네트워크가 작동하지 않을 수도 있습니다.

귀하의 상황에 따라 다음을 수행합니다.

  1. 다시 시작 작업이 알려진 위치에 고유한 파일을 쓰도록 합니다.
  2. 예를 들어 X분마다 정기적으로 실행되는 일반적인 cronjob이 있습니다. 이 작업은 고유한 파일이 존재하는지, 그리고 최소 Y분 동안 지속되었는지 확인합니다.

파일이 존재하고 충분히 오래된 경우 파일이 삭제되고 번들을 시작하는 명령이 실행됩니다. 확인하면 재부팅 후 약 Y~X+Y분 동안 명령이 한 번만 시작되는지 확인할 수 있습니다. 값을 줄일 수 있습니다.)

또 다른 접근 방식은 init.d 작업을 직접 생성하고 적절한 링크를 삽입하여 필요한 모든 서비스를 시작하는 것입니다. (이 작업을 수행하는 방법 systemd은 데비안 시스템이 사용하는 시스템 유형에 따라 다릅니다. sysvinit)

관련 정보