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

관련 정보