전원이 꺼졌을 때 무선 네트워크가 필요한 스크립트 실행

전원이 꺼졌을 때 무선 네트워크가 필요한 스크립트 실행

종료 시 한 Linux 상자에서 다른 Linux 상자로 디렉토리를 동기화하는 스크립트를 실행하려고 합니다. 나는 그것이 잘 작동한다고 생각했지만 모든 테스트는 유선 연결을 통해 연결된 상자에서 이루어졌습니다.

노트북으로 시도해보니 실패했습니다. IP 상태를 파일에 반영하는 디버그 스크립트를 생성하고 서비스에서 실행했는데 캐리어가 무선 인터페이스에서 제거되고 있지만 유선 인터페이스에서는 제거되지 않으므로 문제 없이 유선으로 작동하는 것으로 나타났습니다. Wi-Fi를 통해 실패합니다.

무선으로 작동하길 원합니다. 이것이 제가 노트북에서 사용하는 설정이며 유선 및 무선 인터페이스가 구성되어 있습니다.

나는 prepowoff 서비스가 시작 시 늦게 실행되는지 확인하기 위해 systemd-analyze 그래프를 사용했습니다. 따라서 내가 읽은 바에 따르면 종료는 종료 시퀀스 초기에 발생해야 합니다.

파일과 디버깅 정보는 다음과 같습니다.

prepowoff.service(/etc/systemd/system)

[Unit]

After=multi-user.target
Before=shutdown.service reboot.service halt.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/root/bin/debug

[Install]
WantedBy=multi-user.target

디버그 스크립트(/root/bin에 있음)

#!/bin/bash
DATE=$(/bin/date +"%D - %T - %N")
WLAN0_STATE=$(/sbin/ip a show wlan0)
ETH0_STATE=$(/sbin/ip a show eth0)
LOGFILE=/root/bin/log.txt
SLEEP=/bin/sleep
echo "++++++  START  ++++++" > ${LOGFILE}
echo ${DATE} >> ${LOGFILE}
echo "--------------------" >> ${LOGFILE}
echo ${ETH0_STATE} >> ${LOGFILE}
echo "--------------------" >> ${LOGFILE}
echo ${WLAN0_STATE} >> ${LOGFILE}
echo "+++++  END  ++++++++" >> ${LOGFILE}

디버그 스크립트의 출력입니다. 부팅 후 실행하면 IP 정보가 제거되지만 상태를 볼 수 있습니다.

++++++  START  ++++++
01/16/16 - 16:50:47 - 145920573
--------------------
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
--------------------
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
+++++  END  ++++++++

다음은 재부팅 후 유선 인터페이스가 켜져 있고 무선 인터페이스가 꺼져 있음을 보여주는 출력입니다.

++++++  START  ++++++
01/16/16 - 16:51:10 - 424001117
--------------------
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
--------------------
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN
+++++  END  ++++++++

NetworkManager-wait-online.service를 활성화하고 계속하는 등 다양한 방법을 시도했지만 서비스를 활성화하는 것만으로도 오류가 발생하기 시작했습니다. 이론상으로 prepowoff 서비스 종료가 다른 것보다 먼저 발생해야 하기 때문에 이동통신사가 Wi-Fi를 사용하는 이유를 이해할 수 없습니다.

어떤 도움이라도 대단히 감사하겠습니다.

감사해요.

답변1

이 서비스 파일을 사용하여 작업할 수 있었습니다.

[Unit]
After=wpa_supplicant.service dbus.service NetworkManager.service
Requires=wpa_supplicant.service dbus.service NetworkManager.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/root/bin/prepowoff

[Install]
WantedBy=multi-user.target

네트워크 관리자가 계속 실행 중이더라도 wpa 신청자와 dbus는 여전히 무선 카드를 종료합니다.

관련 정보