systemd サービスは、起動後に eth0 がインターネットに接続されていない場合にのみ正常に開始できます。

systemd サービスは、起動後に eth0 がインターネットに接続されていない場合にのみ正常に開始できます。

質問:

スクリプトを実行してLTE / GSMプロバイダーに接続できるsystemdサービスを開始しようとしていますが、eth0が切断されたときにのみサービスが正常に開始されるようにします。また、eth0が後で切断状態になるかどうか(より多くの努力が必要な場合)ではなく、起動後のサービストリガーにのみ興味があります。

試験を終えた:

これまで私が持っているのは、/var/run/inet-successに一時ファイルを書き込む/etc/network/if-up.d/lte-checkにあるスクリプトです。また、ExecStartPreを使用する前にファイルが存在しないことを確認するシステムサービスもあります。

結果:

起動時にeth0が接続されると(インターネット接続を使用)、inet-successファイルは揮発性ストアに書き込まれ、LTEサービスは実行されません。これは予想される動作です。

起動時にeth0が接続されていない場合、inet-successファイルは揮発性ストアに書き込まれず、LTEサービスは実行されません。これは予想される動作ではありません。

また、/var/run/inet-success を手動で削除すると、eth0 が接続されている状態 (インターネット接続) から起動し、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

関連情報