머신이 재부팅될 때마다 이 systemctl 서비스를 다시 시작해야 하는 이유는 무엇입니까?

머신이 재부팅될 때마다 이 systemctl 서비스를 다시 시작해야 하는 이유는 무엇입니까?

저는 Raspberry Pi(Raspbian Buster)에서 실행되는 홈메이드 베이비 모니터를 가지고 있습니다. 모니터를 systemctl실행하려면 2개의 서비스가 필요합니다.

  • 야누스 스트림.서비스: Jaanus Gateway 소프트웨어에서 사용할 GStreamer 파이프라인 설정
  • 젠펑 서비스: 스트림에 대한 WebRTC 연결을 용이하게 하기 위해 Janus Gateway를 시작합니다.

과거 어느 시점에서 저는 Pi가 재부팅될 때 스트림이 자동으로 시작되도록 이러한 서비스를 설정했습니다. 하지만 지난 몇 달 동안 어떤 이유로(안타깝게도 언제 시작했는지 기억이 나지 않습니다) 재부팅 후 스트림에 액세스하려고 하면 다음 오류가 발생합니다.No such mountpoint/stream 1 Pi 재부팅 후 스트림에 액세스하려고 할 때 오류가 발생했습니다.

이 오류는 Janus Gateway 내에서 발생하는 것으로 보입니다.이 문제를 해결하는 유일한 방법은 Pi에 SSH로 연결하고 실행하는 것입니다.sudo systemctl restart janus.service. 왜 이런 일이 발생하는지 또는 정상적인 시작 동작을 복원하기 위해 이를 수정하는 방법을 알 수 없습니다.

두 가지 이론이 있습니다.

  1. 어쩌면 내 애플리케이션을 이전과 지금 실행해야 할 수도 있지만 janus-stream.service그런 일은 일어나지 않습니다. janus.service이는 누락된 스트림 오류를 설명할 수 있습니다. 이것이 문제라면이러한 서비스의 시작 순서를 어떻게 보장하나요?
  2. 이것이 어떻게 작동하는지 잘 모르겠지만 systemctl몇 달 전에 Janus Gateway의 새로운 기능을 시험할 때 몇 가지 실수를 저질렀을 수도 있지만 그 이후로 모든 변경 사항을 이전에 작동했던 것으로 되돌렸습니다.systemctl잘못된 Janus 게이트웨이 구성이 캐시되어 시작 시 필수 명령 대신 실행될 수 있습니까 ?그렇다면 서비스를 수동으로 다시 시작해야 합니까?

도움을 주셔서 미리 감사드립니다!

답변1

janus.service이후 부분 이 시작 janus-stream.service되도록 하려면 두 줄이 더 필요합니다.[Unit]janus.service

Wants=janus-stream.service
After=janus-stream.service

첫 번째 줄은 janus.service필수임을 지정 janus-stream.service하지만부팅 순서를 지정하지 않습니다.(때로는 다른 서비스를 사용하는 서비스의 경우와 같이 괜찮을 수도 있지만 사용자가 실제로 서비스에 연결하고 특정 작업을 수행한 후에만 가능합니다.)

원하는 시작 순서를 지정하려면 이 After=janus-stream.service줄도 필요합니다.

Requires=대신 종속성을 사용하면 Wants=종속성이 충족되지 않으면 전체 부팅 작업이 실패로 간주되어 부팅에 실패하면 부팅 시 시스템이 패닉 모드로 전환되는 부작용이 있습니다. 아마도 janus-stream.service... 아마도 문제를 해결하기 위한 최선의 선택이 아닙니다.

man systemd.unit설명하다:

실패한 서비스를 처리할 때 Wants=보다 강력한 시스템을 구현하려면 대신 를 사용하는 것이 더 나은 선택인 경우가 많습니다.Requires=

편집이 완료되면 Tell을 janus.service실행하여 편집 내용을 적용하기 위한 구성과 모든 유닛 파일을 다시 로드해야 합니다.systemctl daemon-reloadsystemd

관련 정보