インターネット接続に応じて、スクリプトを実行する方法


48

私はしばしばsshfsを使用してリモートドライブをマウントします。このマウントを自動的に実行したいと思います。ただし、.bashrcまたは起動スクリプトでマウントすると、ワイヤレスインターネット接続がまだ確立されていないため、マウントが失敗することがよくあります。

接続が確立されるたびにbash scripを実行する簡単な方法、またはsshfsドライブを自動マウントする方法を知っている人はいますか?

回答:


56

スクリプトをに追加します/etc/network/if-up.d/。「.sh」拡張子なしでスクリプトに名前を付けます。

また、スクリプトの実行chmod +x /etc/network/if-up.d/yourscriptnameを追加した後、必要な許可を与えます。

ファイルがオンになっているときにスクリプトをトリガーするネットワークインターフェイス(wlan0またはeth0など)がファイルに記載されていることを確認します/etc/network/interfaces


12
スクリプト内で/etc/network/*.d/変数$IFACEを使用して、どのインターフェイスが接続を取得しているかを知ることができるため、たとえば有線接続の場合は手順をスキップできます。
カルロスキャンデロス

これを行う特定のネットワークを指定する方法はありますか?それは私のホームネットワークだとき、私は、スクリプトを実行したいが、ときにネットワークうち約I'ts私はしたくない場合があります...
ジョシュア・ロビソン

3
これは実際にはまったく機能していないようです。ターミナルで./を使用してスクリプトを実行できるため、スクリプトが機能することはわかっていますが、接続はオンとオフを切り替えても、スクリプトはまったく呼び出されません。何らかの方法でそれらを参照するために私がしなければならないことはありますか?if-up.dにスクリプトをドロップすると、ステップが不足しているように見えますか?!?!
ジョシュアロビソン

1
正しい許可が与えられているかどうかを確認してください。
dedunumax

2
interfacesそこにないときに正確に何を入力すべきかを追加してください。それとauto wlan0iface wlan0 inet dhcpそれとも他のものですか?
クッキー14年

25

編集者注:イカは2012年以降更新されておらず、現在のUbuntuリポジトリにはありません

Ubuntu 12.04

  • Cuttlefishのインストール:特定のイベントがトリガーされたときにアクションを実行することにより、コンピューターの反射を実現するシンプルなツール。
  • イカを開き、をクリックしNewます。

    ステップ1

    • 名前を付けて、[ 刺激によりアクティブ化 ]オプションを[オン]に変更します。
    • [ 刺激]をクリックし、[ ネットワーク]カテゴリを選択して、[ WLANに接続]と入力します。OKをクリックします。

    ステップ2

    • ワイヤレスネットワークのSSIDを選択することもでき、起動時にこれを確認するかどうかを選択できます。

    ステップ3

    • 次に、反応を指定する必要があります。[ 反応 ]タブに移動し、[追加]をクリックします。カテゴリーから「アプリケーション」を選択し、タイプから「アプリケーションの開始(拡張モード)を選択します

    ステップ4

    • 次に、実行可能オプションで実行するスクリプトを指定します。スクリプトにパラメーターを渡すこともできます。

    ステップ-5

    • 以上です!また、スタートアップアプリケーションにCuttlefishを追加してください。[編集]> [設定]に移動し、自動起動オプションを有効にします。

    ステップ-6


6
イカは完全に壊れており、しばらく更新されていません。Linux向けのAndroidのTaskerアプリのようなものが必要なので、もっと開発できるといいのですが。etc / network / interfacesやif-upフォルダやスクリプトを台無しにしたい人はいません。クリックまたはオンとオフを切り替えることができるものを教えてください。
ジョシュアロビソン14年

2

OPの質問のこの部分に答えます:「このマウントを自動的に実行したい」

ネットワーク共有を自動マウントするための私のお気に入りのツールはautofsです:https : //help.ubuntu.com/community/Autofs

AutoFSは、すべてのラップトップおよびワークステーションで、NASをマウントするための最適なツールです。

autofsの自動的、必要に応じてディレクトリをマウントするためのプログラムです。自動マウントは、それらがアクセスされるようにのみ搭載されており、一定の時間後にアンマウントされている。このため、NFS / Samba共有に節約帯域幅とより良いオファーを自動マウントfstabによる静的マウントと比較した全体的なパフォーマンス。


OPはすでに他の回答を受け入れているため、可能な場合の回答は少し遅れる場合があります。もちろん、あなたの助けはありがたいですが、答え
-Wayne_Yux

ウェイン、申し訳ありませんが、RBellはここで最後の笑いを得ました-そのパッケージは古くなっているため、最良の答え(イカの使用について)はもはや関係ありません-しかし、autofsはまだ存在し、この投稿では見ていませんでした。ありがとう、RBell!
KlaymenDK

1

最良のシンプルで簡単な方法は、作業するインターフェイスにupコマンドを追加することです。

インターフェイスは、ファイル名「interfaces」の下の「/ etc / network /」ディレクトリにあります。

iface elan0 inet manual
    up filename.sh

これにより、upコマンドがelan0に追加されます。これを、やりたいと思うインターフェイスに与えます。1つのタブスペースをインデントすることを忘れないでください。

ファイルに実行権限を付与してください。

sudo chmod 755 filename.sh

1
素晴らしい!tun0によって管理されるVPNインターフェイスで動作しますnetwork-manager。キーはの使用ですinet manual
KrisWebDev

1

私が懸念している限り、この/etc/network/if-up.d/ソリューションは/etc/network/interfaces、以下に追加したときと同じように機能しませんでした。

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

Wifiは再起動後に起動します。

しかし、いくつかの闘争の後、からこのリンクを、どのような仕事をすることにスクリプトを追加した/etc/NetworkManager/dispatcher.d/形で、スクリプトの優先順位があり、次の形式を持ちます:90myscript.sh90

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

誰がシステムレベルでネットワーク構成を制御するかには問題があると思いますが、デフォルトのnetwork動作がディスパッチャの動作に残されることがあります。

また、(私のように)スクリプトへのシンボリックリンクを(ファイルをより良い場所に保存するために)したい人にとっては、残念ながらそれはうまくいきませんでした。

お役に立てれば!


1

systemd 最近ネットワークを引き継いでいるようです。

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

インターフェースに対応するユニットもあります

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

どうやらこれらをサービスユニットファイルで使用できるようです。したがって、スクリプトを実行するサービスユニットを作成し、その中のようなものを使用して、ネットワーク上で条件付きで実行します。

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

幸運を!私はこれをテストしていませんので、「あなたの走行距離は異なる場合があります」。

ソース:

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