web-dev-qa-db-ja.com

ワイヤレスネットワーク接続で実行されるsystemdサービス

時々しか利用できないモバイルAPに接続しようとするサーバーがあります。このAPは、サーバーがこの特定のAPに接続する瞬間にダウンロードする必要がある画像を備えたカメラです。ダウンロードスクリプトを実行する必要があります(既に記述しています)。

非常にダーティなポーリングができることは知っていますが、systemdにudevブリッジのようなものはありますか?私の検索はすべて、あまり当てはまらない非常に一般的なネットワーク関連のものをもたらしています。ここで重要なのは、スクリプトの側面です。

これを投稿してから数秒後にsystemdである必要はありませんnetwork-manager(wifi接続を管理している)を介してこれを行う必要がある場合は、...しかし、これは15.10向けで、16.04にデプロイするビューがあり、現在は14.04のUpstartでこれを行っています。

3
Oli

Network Managerディスパッチャースクリプトを使用して、インターフェイスのアップイベントとダウンイベントにフックできます。

Sudo touch /etc/NetworkManager/dispatcher.d/00do_stuff
Sudo chmod u+x /etc/NetworkManager/dispatcher.d/00do_stuff

スクリプトは次の行に沿って移動できます。

#!/bin/sh
if [ $1 = wlp3s0f0 -a $2 = up -a $CONNECTION_ID = wlan ]; then
    # do stuff
fi

man networkmanagerは、ディスパッチャスクリプトの実行時間が長すぎると、ある時点でスクリプトが強制終了されるため、可能性がある場合は、タスクを実行するために別のスクリプトをフォークすることをお勧めします。

#!/bin/sh
if [ $1 = wlp3s0f0 -a $2 = up -a $CONNECTION_ID = wlan ]; then
    (/home/user/scripts/do_stuff.sh) & disown
fi

Network Managerは、特定のイベントがトリガーされるたびに、/etc/NetworkManager/dispatcher.dのすべてのスクリプトをアルファベット順に実行し、インターフェイスとイベントを引数として渡します。

$CONNECTION_IDは環境を介してスクリプトで使用可能になり、この場合はman networkprofileによって報告される正しい接続プロファイルを使用して接続されていることを確認するためにチェックされます私の場合、$CONNECTION_IDをSSIDでチェックするとうまくいきますが、これが別の有線接続プロファイルの名前と一致した場合にどうなるかはわかりません)。

2
kos