질문:
스크립트를 실행하여 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