ワイヤレスネットワークが必要な電源オフ時にスクリプトを実行する


0

シャットダウン時に、あるLinuxボックスから別のLinuxボックスにディレクトリを再同期するスクリプトを実行しようとしています。私はそれが機能していると思っていましたが、すべてのテストは有線接続で接続されたボックスで行われました。

ラップトップで試してみたところ、失敗しました。ipのステータスをファイルにエコーするデバッグスクリプトを作成し、サービスで実行すると、キャリアがワイヤレスインターフェイスから削除され、有線インターフェイスからは削除されないことが示されたため、有線では問題なく動作しますが、wifiでは失敗します。

ここでワイヤレスで動作するようにしたいのですが、ラップトップで使用しているセットアップで、有線と無線の両方のインターフェースを設定しています。

systemd-analyzeプロットを使用して、ブートアップの後半でprepowoffサービスが実行されることを確認しました。これにより、シャットダウンシーケンスの早い段階でシャットダウンを読み取ることができます。

ファイルとデバッグ情報は次のとおりです。

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サービスのシャットダウンは他の何よりも先に行われるべきであるため、キャリアがwifiに接続する理由を理解できません。

どんな助けも大歓迎です。

ありがとう。

回答:


0

私はこのサービスファイルでそれを動作させることができました。

[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

Network Managerがまだ実行されていても、wpaサプリカントとdbusがワイヤレスカードを削除していました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.