İnternet bağlantısına bağlı olarak bir komut dosyası nasıl çalıştırılır


48

Genellikle sshfs kullanarak uzak bir sürücüyü takarım. Bu montajı otomatik olarak yaptırmayı çok isterim. Bununla birlikte, .bashrc veya başlangıç ​​komut dosyalarımda bağlarsam, kablosuz internet bağlantım henüz yapılmadığı için bağ çoğu zaman başarısız oluyor.

Bağlantı yapıldığı her seferinde bir bash betiğini çalıştırmanın ya da bir sshfs sürücüyü otomatik olarak monte etmenin kolay bir yolunu bilen var mı?

Yanıtlar:


56

Komut dosyanızı ekleyin /etc/network/if-up.d/. Komut dosyanızı '.sh' uzantısı olmadan adlandırın.

Ayrıca komut dosyası çalıştırdıktan sonra chmod +x /etc/network/if-up.d/yourscriptnamegerekli izinleri vermek için çalıştırın .

Dosyada açıldığında betiğinizi tetiklemesi gereken ağ arayüzünün (örneğin, wlan0 veya eth0) olduğundan emin olun /etc/network/interfaces.


12
İçindeki komut dosyalarının içindeki /etc/network/*.d/değişkeni $IFACE, hangi arabirimin bağlantı aldığını bilmek için kullanabilirsiniz, böylece örneğin kablolu bağlantı ise prosedürü atlayabilirsiniz.
Carlos Campderrós

Bunu yapmak istediğiniz belirli bir ağı belirtmenin bir yolu var mı? bu benim ev ağım olduğunda, senaryoyu yapmak istiyorum ama bir ağ çıkınca ve yaklaşık olarak yapmak istemeyebilirim ...
Joshua Robison, 9

3
Bu aslında hiç işe görünmüyor. Komut dosyalarımın çalıştığını biliyorum, çünkü bunları terminalde ./ kullanarak çalıştırabilirim ve çalışırlar, ancak bağlantıyı kapatıp açtıklarımda komut dosyaları hiç çağrılmaz. Onlara bir şekilde başvurmak için yapmam gereken bir şey var mı? if-up.d içine bir betiği bırakmak bir adımdan yoksun gibi görünüyor?!?!
Joshua Robison,

1
Lütfen doğru izinleri yerine getirip getirmediklerini kontrol edin.
dedunumax

2
Lütfen interfacesorada olmadığı zamanlarda tam olarak nelerin girmesi gerektiğini ekleyin . Öyle mi auto wlan0ve iface wlan0 inet dhcpyoksa STH?
Cookie

25

Editörün notu: Mürekkepbalığı 2012'den beri güncellenmedi ve şu anki herhangi bir Ubuntu deposunda değil

Ubuntu 12.04

  • Mürekkepbalığı Takın : Bilgisayarınızda belirli olaylar tetiklendiğinde eylemleri gerçekleştirerek refleksleri gerçekleştiren basit bir araçtır.
  • Mürekkepbalığı açın ve tıklayın New.

    Aşama 1

    • Bir isim verin ve uyarıcı seçeneği ile Aktifleştirildi seçeneğini AÇIK olarak değiştirin.
    • Uyaran'a tıklayın, kategorisini seçin ve Connect to WLAN yazın . Tamam'a tıklayın.

    Adım 2

    • Ayrıca kablosuz ağın SSID'sini de seçebilirsiniz ve bunu başlangıçta kontrol edip etmeme seçeneğiniz vardır.

    Aşama 3

    • Şimdi bir reaksiyon belirtmeniz gerekecek. Git Reaksiyon sekmesi ve eklemek tıklayın. Seç Uygulamalar kategorisinde ve gelen (gelişmiş modda) Başlat Uygulama türünden.

    4. adım

    • Şimdi çalıştırılabilir seçeneğinde çalıştırmak istediğiniz betiği belirtin. Parametreleri bile komut dosyasına iletebilirsiniz.

    Adım 5

    • Ve bu kadar! Ayrıca başlangıç ​​uygulamalarına Mürekkepbalığı eklediğinizden emin olun. Git > Tercihler ve otomatik başlatma seçeneğini etkinleştirin.

    Adım 6


6
mürekkep balığı tamamen bozuldu ve bir süredir güncelleme görmedi. Keşke daha fazla gelişebilseydi çünkü Android için Linux için Tasker uygulamasına ihtiyacımız var. Hiç kimse etc / network / interfaces ve if-up klasörleri ve scriptleri ile uğraşmak istemez. Bana sadece tıklayabileceğim ya da açıp kapatabileceğim bir şey ver.
Joshua Robison

2

OP sorusunun bu bölümüne cevap vereceğim: "Bu montajı otomatik olarak yaptırmayı çok isterim"

Otomatik paylaşım ağ paylaşımları için en sevdiğim araç autofs: https://help.ubuntu.com/community/Autofs

Tüm dizüstü bilgisayarlarım ve iş istasyonlarım için AutoFS, NAS'ımı monte etmek için tercih ettiğim bir araç.

" autofs, dizinleri ihtiyaca göre otomatik olarak monte etmek için bir programdır. Otomatik montajlar, yalnızca erişildiklerinde monte edilir ve belirli bir süre kullanılmadığında sökülmez. fstab aracılığıyla statik montajlara kıyasla genel performans. "


OP diğer bir cevabı çoktan kabul ettiğinden, mümkünse cevabınız biraz geç olabilir. Yardımınız elbette takdir edilmektedir, ancak çabalarınızı cevapsız sorular
verebilirsiniz

Üzgünüm Wayne, RBell burada son kahkahayı aldı - en iyi cevap (Mürekkepbalığı kullanarak) artık ilgili değil çünkü bu paket modası geçmiş - ancak autofs hala var ve bu yazı için olmasa bile görmedim. Teşekkürler, RBell!
KlaymenDK

1

En iyi, basit ve kolay yolu üzerinde çalışmak istediğiniz arayüze yukarı bir komut eklemek olacaktır.

Arabirimler, "/ etc / network /" dizininde "arabirimler" dosya adı altında bulunabilir.

iface elan0 inet manual
    up filename.sh

Bu, elan0'a up komutunu ekleyecektir. Eş zamanlı olarak bunu çalışmak istediğiniz ara yüze verin. Bir sekme boşluğu girmeyi unutmayın.

Çalıştırma izinlerini dosyaya verdiğinizden emin olun.

sudo chmod 755 filename.sh

1
Fantastik! tun0Tarafından yönetilen VPN arayüzleri ile çalışır network-manager. Anahtar kullanımıdır inet manual.
KrisWebDev

1

Endişelendiğim kadarıyla, /etc/network/if-up.d/çözüm /etc/network/interfacesaşağıdakileri eklediğimde benden işe yaramadı :

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

Wifi yeniden başlatıldıktan sonra başlayacaktı.

Ama bazı mücadelesinin, sonra bu bağlantıyı ne çalıştı komut dosyası eklemektir oldu /etc/NetworkManager/dispatcher.d/formda senaryonun ve aşağıdaki form ile öncelik düzeyi: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

Ağ yapılandırmasını sistem düzeyinde kontrol eden arasında bazı sorunlar var ve bazen varsayılan networkdavranış, göndericinin arkasında kalıyor.

Ayrıca, benden hoşlananlar için - benim gibi - senaryo ile sembolik bir bağlantı kurmaya çalışmak (dosyayı daha iyi bir yerde saklamak) için ne yazık ki benim için işe yaramadı.

Bu yardımcı olur umarım!


1

systemd günümüzde ağ üzerinden devralmış gibi görünüyor.

$ 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.

Aynı zamanda arayüzlere karşılık gelen birimlere sahiptir.

$ 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)

Görünüşe göre bunları servis birimi dosyalarında kullanabilirsiniz. Bu yüzden, sadece betiğinizi çalıştırmak için bir servis birimi oluşturun ve ağda şartlı olarak çalışmasını sağlamak için bunun gibi bir şey kullanın:

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

İyi şanslar! Bunu test etmedim, bu nedenle "kilometreniz değişebilir".

Kaynaklar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.