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


12

배경

Raspberry Pi 2의 Raspbain에서 실행되는 간단한 스크립트를 작성 중입니다. 데스크톱 컴퓨터에서 SSH에 연결할 준비가되었음을 나타내는 LED를 켜십시오.

여기서 스크립트는 주파수 제어를 사용하므로 스크립트가 무한 루프를 실행하여 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것 같습니다. 여기서 무엇이 잘못되었으며 어떻게 해결할 수 있습니까?

답변:


12

체계화 된 지시문에 대한 질문이있는 man systemd.directives경우이를 사용 하여 지시 된 문서를 찾을 수 있습니다 . 이 경우 After=에 설명되어 man systemd.unit있습니다.

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

동일한 문서에도 [INSTALL] 섹션 옵션 After=이 설명되어 있으며 여기에 나열되지 않았습니다.

즉, After=지시문이 유닛 파일의 잘못된 위치에 있었으므로 올바른 위치로 이동할 때까지 아무런 영향을 미치지 않았습니다.


분명히이 경우 "[Unit]"은 서비스 파일이므로 "[Service]"입니다.
faho

수정 사항이있는 붙여 넣기 가능한 답변이 더 나았을 것입니다!
GerardJP

@GerardJP 한 남자에게 물고기를 가르치고 하루 동안 그에게 먹이를주는 것이 좋습니다. 사람들이 체계적인 설명서를 사용하는 방법을 알고 나면 타사 문서를보고 StackExchange에 시간을 소비하지 않고도 권위있는 답변을 찾을 수 있습니다.
Mark Stosberg 오전

11

서비스를 다음과 같이 수정하여 수정하십시오.

[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

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

최신 정보

이 답변은 수락 된 답변이 오기 전에 직접 작성되었습니다.


것을 After=지시가 있어야합니다 [Unit]섹션. 바로 그거야
Bigon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.