"ip Route show"가 내 스크립트의 시스템 서비스에서 출력을 생성하지 않는 이유

"ip Route show"가 내 스크립트의 시스템 서비스에서 출력을 생성하지 않는 이유

제공하다..

[Unit]
Description=testing
Requires=network-online.target
After=NetworkManager.service

[Service]
SyslogIdentifier=testing
Type=oneshot
ExecStart=test.sh

[Install]
WantedBy=network-online.target

테스트.sh...

#!/usr/bin/env bash
nmcli connection up router.wired
echo ***
nmcli connection show
echo ***
ip route show

산출..

testing[779]: Connection successfully activated (D-Bus active path: /org/freedesktop/Network>
testing[772]: ***
testing[1468]: NAME          UUID  TYPE      DEVICE
testing[1468]: router.wired  xxxx  ethernet  enp1s0
testing[1468]: router        xxxx  wifi      --
testing[772]: ***

ip route show연결이 설정되었음에도 출력이 표시되지 않는 이유는 무엇입니까? 전화 없이 어떻게 이 일을 할 수 있나요 nmcli connection up?

스크립트에서 이를 가져오면 nmcli connection up시스템은 어쨌든 해당 연결로 부팅됩니다. 이 시점에서 수동으로 서비스를 호출하고 sudo service test start기본 게이트웨이를 포함하여 예상 결과를 얻을 수 있습니다.ip route show

만족스럽지 못한 해결책...

문제는 시스템이 부팅되는 순서인 것 같습니다. 부팅 시 서비스를 비활성화하고 대신 타이머 장치를 사용하여 활성화하려고 시도했는데 제대로 OnBootSec=50작동했습니다. 나는 성공하지 못한 network.targetnetwork-online.target가능한 모든 의존성을 시도했습니다 NetworkManager.service.

답변1

내 생각엔 ip route그것이 너무 빨리 종료되어 systemd-journald가 그것이 속한 장치를 제대로 감지하지 못한 것 같습니다. 조사하다글로벌 journalctl -b원하는 출력이 있는지 확인하세요. (이것은 알려진 문제입니다.)

또한, 그러나:

  1. Requires=의미는 아니므 After=로 서비스는 실제로 network-online.target에 도달하기를 기다리지 않습니다. 분명히 말해야 합니다 After=network-online.target.

    (종속성이 나타나면 After=를 의미합니다.~에서대상이지만 다른 상황에서는 그렇지 않습니다. )

  2. systemd-networkd-wait-online기본적으로 network-online.target은 실제로 비어 있습니다. 예를 들어 또는 귀하의 경우에 적절한 "대기" 서비스를 활성화하는 것은 귀하에게 달려 있습니다 NetworkManager-wait-online. 후자가 활성화되어 있는지 확인하십시오. 그렇지 않으면 대상은 아무 작업도 수행하지 않습니다.

  3. 당신의반면에 서비스는 다음과 같아야합니다.아니요에 들어가는 것이 WantedBy=network-online.target목표의 목적은 아닙니다.

관련 정보