仅当开机后eth0未联网时才能成功启动systemd服务

仅当开机后eth0未联网时才能成功启动systemd服务

问题:

我正在尝试启动一个 systemd 服务,该服务可以通过运行脚本来连接到 LTE/GSM 提供商,但我只希望该服务在 eth0 处于断开连接状态时成功启动。此外,我只关心启动后触发服务,而不关心 eth0 是否在稍后进入断开状态(如果需要付出更多努力)。

尝试过:

到目前为止,我拥有的是位于 /etc/network/if-up.d/lte-check 的脚本,它将临时文件写入 /var/run/inet-success 。我还有一个 systemd 服务,可以在开始使用 ExecStartPre 之前进行检查以确保该文件不存在。

结果:

当 eth0 在启动时插入(具有互联网连接)时,inet-success 文件将写入易失性存储,并且 LTE 服务不会运行。这是预期的行为。

当启动时未插入 eth0 时,inet-success 文件不会写入易失性存储,并且 LTE 服务不会运行。这不是预期的行为。

此外,在插入 eth0(具有互联网连接)的情况下启动后,手动删除 /var/run/inet-success 会触发 systemd 服务正确启动。

环境:

Raspberry Pi4
Operating System: Raspbian GNU/Linux 10 (buster)
Kernel: Linux 4.19.118-v7l+
Architecture: arm

/etc/network/if-up.d/lte-check

#!/bin/sh
FLAGFILE=/var/run/inet-success

case "$IFACE" in
        "--all") : ;;
        *) exit 0;;
esac
if [ -e $FLAGFILE ]; then
    exit 0
else
    /usr/bin/touch $FLAGFILE
fi

/etc/systemd/system/lte.service

[Unit]
Description=LTE Service
After=network.target
StartLimitIntervalSec=0

[Service]
ExecStartPre=/usr/bin/test ! -f /var/run/inet-success
ExecStart=/opt/lte/files/quectel-CM/quectel-CM -s wireless.twilio.com
RestartSec=1m
Restart=on-failure
User=root
Type=simple

[Install]
WantedBy=multi-user.target

相关内容