systemd-timer
네트워크 서비스를 사용하는 스크립트를 주기적으로 실행하는 데 사용하고 있습니다 .
문제는 시스템이 다시 시작되거나 깨어날 때 인터넷 연결이 즉시 시작되지 않고 타이머가 트리거되어 스크립트가 오류를 반환한다는 것입니다(서비스가 몇 초 동안 기다리면 스크립트가 올바르게 실행되고 오류가 발생합니다). 다음 번 실행까지 작업을 연기할 필요가 없습니다.)
1-네트워크 연결이 가능해질 때까지 타이머(또는 이와 관련된 서비스)가 기다리도록 하려면 어떻게 해야 합니까?
2-시스템이 아직 온라인 상태가 아닐 때 타이머(또는 서비스)가 스크립트를 호출하지 않도록 만드는 방법은 무엇입니까?
답변1
타이머 섹션 After=network-online.target
에 추가되었습니다 .[Unit]
설명하다:
[Unit]
타이머는 서비스 섹션에 알려진 모든 관련 시퀀싱 명령을 허용합니다. 실제로 타이머와 서비스 [Unit]
부품은 동일합니다. [Install]
형태공식 매뉴얼:
이름이 ".timer"로 끝나는 장치 구성 파일은 타이머 기반 활성화를 위해 systemd에서 제어하고 감독하는 타이머에 대한 정보를 인코딩합니다.
이 매뉴얼 페이지에는 이 장치 유형과 관련된 구성 옵션이 나열되어 있습니다. 바라보다시스템 유닛(5)모든 장치 구성 파일에 공통되는 옵션입니다. 공통 구성 항목은 공통 [Unit] 및 [Install] 섹션에서 구성됩니다. 타이머별 구성 옵션은 [Timer] 섹션에서 구성됩니다.
이해해야 한다는 뜻이다.네트워크 온라인.대상네트워크가 다음과 같은지 여부를 정의합니다.위로.
network-online.target은 네트워크 "up"을 적극적으로 기다리는 대상입니다. 여기서 "up"의 정의는 네트워크 관리 소프트웨어에 의해 정의됩니다. 일반적으로 이는 일종의 구성되고 라우팅 가능한 IP 주소를 나타냅니다. 주요 목적은 네트워크가 구축될 때까지 서비스 활성화를 적극적으로 지연하는 것입니다.
한정
network-online.target
수표 없음인터넷이 아니라면회로망연결하다. 물론 LAN 자체에서는 인터넷에 접속할 수 없을 수도 있습니다. 연결을 제공하기 위해 라우터나 ISP에 의존할 수 없는 경우 test-internet.service
특정 웹 사이트를 핑하는 특수 프로토콜을 만들고 한 번 성공한 경우에만 활성으로 정의해야 합니다(그렇지 않으면 실패 시 15초마다 다시 시작되거나 그러니 시작하세요). 이것은 Type=oneshot
서비스 여야 합니다 RemainAfterExit=yes
. 하지만 나는 그것이 당신이 요구하는 것이라고 생각하지 않습니다.
범위: 시스템/사용자
조심하세요 network-online.target
좋아요체계범위 단위. 장치는사용자범위는 그것을 볼 수 없으며 시작되지 않습니다. 이 문제는 링크 단위( )를 생성하여 해결할 수 있습니다 systemctl --user link /lib/systemd/system/network-online.target
. 경로는 다를 수 있습니다. 다음을 실행하여 위치를 확인할 수 있습니다.systemctl show --property FragmentPath network-online.target