Systemd: 네트워크가 완전히 연결된 후 systemd 서비스를 시작하는 방법은 무엇입니까?

Systemd: 네트워크가 완전히 연결된 후 systemd 서비스를 시작하는 방법은 무엇입니까?

배경

저는 Raspberry Pi 2의 Raspbain에서 실행할 간단한 스크립트를 작성하고 있습니다. 이 스크립트는 LED를 켜서 데스크톱 컴퓨터에서 SSH를 실행할 준비가 되었음을 나타냅니다.

여기서 스크립트는 중요하지 않습니다. 주파수 제어를 사용하고 있으므로 스크립트가 LED를 자주 켜고 끄기 위해 무한 루프에서 실행된다는 점만 언급하면 ​​충분합니다. 간단한 서비스 예시입니다. 그러나 적어도이 질문에 대한 답변유형을 유휴로 설정하는 것이 좋습니다. 내 서비스 파일은 다음과 같습니다.

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
Wants=network-online.target
After=network-online.target

영향

서비스가 예상대로 실행됩니다. 그런데 데스크탑 컴퓨터에서 퍼티를 시작했을 때 LED가 켜진 직후에 로그인 프롬프트가 나타나지 않는 것을 발견했습니다. 그래서 확인해 봤어

$ systemd-analyze plot > output.svg

결과는 보여줍니다

여기에 이미지 설명을 입력하세요.

질문

내 서비스가 이후에 시작되지 않는 것 같습니다 network-online.target. 여기서 무엇이 잘못되었으며 어떻게 해결할 수 있습니까?

답변1

systemd 지시문이 의심스러울 경우 이를 사용하여 man systemd.directives해당 지시문이 어디에 기록되어 있는지 알아낼 수 있습니다. 이 경우 에는 After=.man systemd.unit

파일에서 지시어가 "[UNIT] SECTION OPTIONS"에 나열되어 있어 해당 지시어가 파일의 섹션 After=에 속해 있음을 나타냅니다 .[Unit]

동일한 문서에는 일부 [INSTALL] 옵션도 설명되어 있지만 After=여기에는 나열되어 있지 않습니다.

즉, After=지시문이 유닛 파일의 잘못된 위치에 있으므로 올바른 위치로 이동할 때까지 지시문이 적용되지 않습니다.

답변2

서비스를 다음으로 수정하여 문제를 해결했습니다.

[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
WantedBy=network-online.target

아직도 내가하는 일을 완전히 이해하지 못했지만 이제는 작동합니다. 누구든지 이것을 설명할 수 있나요?

고쳐 쓰다

이 답변은 허용된 답변이 나타나기 전에 직접 작성했습니다.

관련 정보