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.

해당 파일에서는 After=지시어가 "[UNIT] SECTION OPTIONS"에 나열되어 있어 해당 지시어가 [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

아직도 내가 하고 있는 일을 완전히 이해하지 못했지만 지금은 작동합니다. 누구든지 설명해 주시겠습니까?

업데이트

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

관련 정보