Systemd, IP 주소 변경 시 서비스 다시 시작

Systemd, IP 주소 변경 시 서비스 다시 시작

나는 매우 간단한 서비스를 작성했습니다.

[Unit]
Description=Service on interface %I

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/project/my_script.sh start %I

[Install]
WantedBy=multi-user.target

나는 네트워크 인터페이스가 어디에 있는지 systemclt start myservice@net0생각 하기 시작했습니다. net0네트워크 인터페이스가 다시 시작될 때마다 서비스를 다시 시작하려면 어떻게 해야 합니까?

답변1

다음과 같이 시스템 장치가 해당 인터페이스에 대한 장치의 해당 네트워크 인터페이스(자동 로드) 에 바인딩( BindTo) 및 종속( DependsOn) 되도록 할 수 있습니다 ..device

[Unit]
Description=Service on interface %I
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/project/my_script.sh start %I

[Install]
WantedBy=multi-user.target

사용자 지정 장치에 네트워크 인터페이스가 있어야 하는 경우 Wants다음을 추가하여 장치의 종속성을 공식화할 수 있습니다.After실제로 온라인섹션에 다음을 추가하면 됩니다 [Unit].

Wants=network-online.target
After=network-online.target

참고: 를 실행하여 단위를 확인할 수 있습니다 .device.loadedsystemctl list-units --type=device

답변2

어쩌면 이것이 효과가 있을 수도 있습니다:https://clinta.github.io/run-service-on-ip-change/

# /etc/systemd/system/ip-change-mon.service

[Unit]
Description=IP Change Monitor
Wants=network.target
After=network-online.target

[Service]
ExecStart=:/bin/bash -c "ip mon addr | sed -nu -r
\'s/.*[[:digit:]]+:[[:space:]]+([^[:space:]]+).*/\\1/p\' | while read iface; do
systemctl restart ip-changed@${iface}.target; done"

[Install]
WantedBy=multi-user.target default.target

관련 정보