Systemd,当ip地址改变时重启服务

Jos*_*uis 6 systemd

我写了一个非常简单的服务:

[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
Run Code Online (Sandbox Code Playgroud)

我开始喜欢systemclt start myservice@net0net0网络接口在哪里。每次重新启动网络接口时如何重新启动服务?

小智 12

您可以让 systemd 单元绑定 ( 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
Run Code Online (Sandbox Code Playgroud)

您可能希望通过添加来形式化单元的依赖关系,Wants并且After如果您的自定义单元希望通过在以下部分中添加这些来使网络接口实际联机[Unit]

Wants=network-online.target
After=network-online.target
Run Code Online (Sandbox Code Playgroud)

注意:您可以验证.device单位loadedsystemctl list-units --type=device

  • 如果我想在任何接口上更改 ip 时重新启动怎么办?!任何的想法 ?我不想绑定到每个当前的接口,我想使用动态的东西。但我无法找出合适的服务/设备来收听。 (2认同)