问题:
我正在尝试启动一个 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