배경
저는 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
아직도 내가하는 일을 완전히 이해하지 못했지만 이제는 작동합니다. 누구든지 이것을 설명할 수 있나요?
고쳐 쓰다
이 답변은 허용된 답변이 나타나기 전에 직접 작성했습니다.