제공하다..
[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.target
채 network-online.target
가능한 모든 의존성을 시도했습니다 NetworkManager.service
.
답변1
내 생각엔 ip route
그것이 너무 빨리 종료되어 systemd-journald가 그것이 속한 장치를 제대로 감지하지 못한 것 같습니다. 조사하다글로벌 journalctl -b
원하는 출력이 있는지 확인하세요. (이것은 알려진 문제입니다.)
또한, 그러나:
Requires=
의미는 아니므After=
로 서비스는 실제로 network-online.target에 도달하기를 기다리지 않습니다. 분명히 말해야 합니다After=network-online.target
.(종속성이 나타나면 After=를 의미합니다.~에서대상이지만 다른 상황에서는 그렇지 않습니다. )
systemd-networkd-wait-online
기본적으로 network-online.target은 실제로 비어 있습니다. 예를 들어 또는 귀하의 경우에 적절한 "대기" 서비스를 활성화하는 것은 귀하에게 달려 있습니다NetworkManager-wait-online
. 후자가 활성화되어 있는지 확인하십시오. 그렇지 않으면 대상은 아무 작업도 수행하지 않습니다.당신의반면에 서비스는 다음과 같아야합니다.아니요에 들어가는 것이
WantedBy=network-online.target
목표의 목적은 아닙니다.