나는 내 systemd 서비스가 부팅 시 시작되지 않는 이유 또는 관련 Ruby 스크립트가 실패할 때마다(내 의도가 무엇인지와 같이) 알아내려고 정말 열중하고 있습니다. EC2 Ubuntu 인스턴스에서 실행하고 있습니다.
서비스 코드는 다음과 같습니다.
[Unit]
Description=Test
[Service]
User=ubuntu
Type=simple
ExecStart=/usr/bin/ruby /home/ubuntu/main/test.rb
Restart=on-failure
RestartSec=1s
[Install]
WantedBy=multi-user.target
대상, 사용자 이름 또는 유형을 변경해 보았지만 아무 일도 일어나지 않았습니다. 잡지에서는 나에게 구체적인 정보를 제공하지 않았습니다. 서비스를 시작하면 원활하게 실행됩니다.
그러나 스크립트가 실패하거나 테스트하기 위해 스크립트를 종료할 때마다 재시작 작업이 무시됩니다.
답변1
종속성 문제인 것 같습니다.
Systemd가 실행 중이고 스크립트를 실행하려면 먼저 Ruby를 실행해야 합니다. 따라서 시작 시 Ruby가 로드/완료되기 전에 서비스가 실행될 수 있습니다. 이것이 바로 상자가 작동되고 실행된 후에 실행할 수 있는 이유입니다.
[Unit] 'After='에 추가된 Ruby 환경의 서비스 이름을 확인하세요.(그게 뭔지는 잘 모르겠습니다.)
그런 다음 Systemd는 서비스 로드를 시도하기 전에 Ruby가 로드될 때까지 기다려야 합니다.
Ruby 스크립트를 살펴보고 필요한 종속성이 무엇인지 확인하세요. 예를 들어, 네트워크를 미리 가동하고 실행해야 할 수도 있습니다. [Unit] 아래에 "After="를 추가한 다음 필요한 종속성을 추가할 수 있습니다.
After=network.target
이것이 바로 상자가 실행되고 필요한 종속성이 로드된 후에 서비스를 시작할 수 있는 이유입니다.