Cara menjalankan skrip, tergantung koneksi internet


48

Saya sering memasang drive jarak jauh menggunakan sshfs. Saya ingin memiliki mount ini secara otomatis. Namun, jika saya memasangnya di skrip .bashrc atau startup saya, pemasangan tersebut sering gagal karena koneksi internet nirkabel saya belum dibuat.

Adakah yang tahu cara mudah untuk mengeksekusi skrip bash setiap kali koneksi dilakukan, atau untuk memasang otomatis drive sshfs?

Jawaban:


56

Tambahkan skrip Anda ke /etc/network/if-up.d/. Beri nama skrip Anda tanpa ekstensi '.sh'.

Juga setelah menambahkan menjalankan skrip chmod +x /etc/network/if-up.d/yourscriptnameuntuk memberikan izin yang diperlukan.

Pastikan antarmuka jaringan (mis. Wlan0 atau eth0) yang seharusnya memicu skrip Anda ketika dihidupkan disebutkan dalam file /etc/network/interfaces.


12
skrip di dalam /etc/network/*.d/Anda dapat menggunakan variabel $IFACEuntuk mengetahui antarmuka mana yang mendapatkan koneksi sehingga Anda dapat melewati prosedur jika itu adalah koneksi kabel misalnya.
Carlos Campderrós

Apakah ada cara untuk menentukan jaringan spesifik yang Anda inginkan untuk melakukan ini? ketika itu adalah jaringan rumah saya, saya ingin membuat skrip tetapi ketika saya tidak ada jaringan dan tentang saya mungkin tidak ingin ...
Joshua Robison

3
ini sebenarnya tidak bekerja sama sekali. Saya tahu skrip saya berfungsi karena saya dapat menjalankannya menggunakan ./ di terminal dan mereka berfungsi tetapi ketika saya beralih dan pada koneksi, skrip tidak dipanggil sama sekali. Apakah ada yang harus saya lakukan untuk merujuk mereka di suatu tempat? menjatuhkan skrip di if-up.d tampaknya tidak memiliki langkah?!?!
Joshua Robison

1
periksa apakah mereka memiliki izin yang benar.
dedunumax

2
Silakan tambahkan apa yang harus dimasukkan interfacesketika tidak ada. Apakah ini auto wlan0dan iface wlan0 inet dhcpatau yang lainnya?
Kue

25

Catatan editor: Sotong belum diperbarui sejak 2012 dan tidak ada dalam repositori Ubuntu saat ini

Ubuntu 12.04

  • Instal Cuttlefish : Alat sederhana, yang merefleksikan refleks pada komputer Anda dengan menjalankan tindakan saat peristiwa tertentu dipicu.
  • Buka Sotong dan klik New.

    Langkah 1

    • Beri nama, dan ubah opsi Activated by stimulus menjadi ON.
    • Klik pada Stimulus , pilih kategori Network dan ketik Connect to WLAN . Klik OK.

    Langkah 2

    • Anda juga dapat memilih SSID jaringan nirkabel dan Anda memiliki opsi untuk memeriksa atau tidak pada saat startup.

    Langkah 3

    • Sekarang Anda harus menentukan reaksi. Buka tab Reaksi , dan klik tambahkan. Pilih Aplikasi dari kategori dan Mulai Aplikasi (dalam mode lanjutan) dari jenis.

    Langkah 4

    • Sekarang tentukan skrip yang ingin Anda jalankan dalam opsi yang dapat dieksekusi. Anda bahkan dapat mengirimkan parameter ke skrip.

    Langkah-5

    • Dan itu dia! Pastikan juga Anda menambahkan Cuttlefish dalam aplikasi startup. Buka Edit> Preferences dan aktifkan opsi autostart.

    Langkah-6


6
cumi-cumi benar-benar rusak dan belum melihat pembaruan untuk beberapa waktu. Saya berharap ini bisa mendapatkan lebih banyak pengembangan karena kita membutuhkan sesuatu seperti aplikasi Android Tasker untuk Linux. Tidak ada yang ingin mengacaukan etc / network / interfaces dan folder if-up dan skrip. Beri saya sesuatu yang bisa saya klik atau matikan dan matikan.
Joshua Robison

2

Saya akan menjawab bagian dari pertanyaan OP ini: "Saya ingin memiliki mount ini secara otomatis"

Alat favorit saya untuk berbagi jaringan secara otomatis adalah autofs: https://help.ubuntu.com/community/Autofs

AutoFS adalah alat pilihan saya untuk memasang NAS saya - untuk semua laptop dan workstation saya.

" autofs adalah program untuk memasang direktori secara otomatis sesuai kebutuhan. Auto-mount hanya dipasang ketika diakses, dan dilepas setelah periode tidak aktif. Karena itu, automounting NFS / Samba berbagi menghemat bandwidth dan menawarkan lebih baik kinerja keseluruhan dibandingkan dengan tunggangan statis melalui fstab. "


Jawaban Anda selagi mungkin mungkin agak terlambat karena OP sudah menerima jawaban lainnya. Bantuan Anda tentu saja dihargai, namun Anda mungkin lebih baik dilayani dengan memfokuskan upaya Anda pada pertanyaan yang belum terjawab
Wayne_Yux

Maaf Wayne, RBell mendapat tawa terakhir di sini - jawaban terbaik (tentang menggunakan Cuttlefish) tidak lagi relevan karena paket itu sudah ketinggalan jaman - tetapi autof masih ada, dan saya belum melihatnya jika tidak untuk posting ini. Terima kasih, RBell!
KlaymenDK

1

Cara terbaik, sederhana dan mudah adalah menambahkan perintah ke antarmuka apa yang ingin Anda kerjakan.

Antarmuka dapat ditemukan di direktori "/ etc / network /" di bawah nama file "interface"

iface elan0 inet manual
    up filename.sh

Ini akan menambahkan perintah ke elan0. Simillarly memberikan ini untuk apa antarmuka yang ingin Anda kerjakan Ingatlah untuk membuat indentasi satu ruang tab.

Pastikan Anda memberikan izin eksekusi ke file.

sudo chmod 755 filename.sh

1
Fantastis! Bekerja dengan tun0antarmuka VPN yang dikelola oleh network-manager. Kuncinya adalah penggunaan inet manual.
KrisWebDev

1

Sejauh yang saya ketahui, /etc/network/if-up.d/solusinya tidak bekerja dari saya seperti ketika saya menambahkan /etc/network/interfacesberikut ini:

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

Wifi akan mulai setelah reboot.

Tetapi setelah beberapa perjuangan, dari tautan ini , yang berhasil adalah menambahkan skrip ke /etc/NetworkManager/dispatcher.d/dalam bentuk di 90myscript.shmana 90tingkat prioritas skrip dan dengan formulir berikut:

#!/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

Saya kira ada masalah antara siapa yang mengendalikan konfigurasi jaringan di tingkat sistem dan kadang-kadang networkperilaku default ditinggalkan di belakang operator.

Juga, bagi mereka yang ingin - seperti saya - untuk mencoba memiliki tautan simbolik ke skrip (untuk menyimpan file di lokasi yang lebih baik), sayangnya itu tidak berhasil untuk saya.

Semoga ini membantu!


1

systemd tampaknya telah mengambil alih jaringan saat ini.

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

Ini juga memiliki unit yang sesuai dengan antarmuka

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

Tampaknya Anda dapat menggunakan ini dalam file unit layanan. Jadi buat saja unit layanan untuk menjalankan skrip Anda dan gunakan sesuatu seperti itu di dalam untuk membuatnya berjalan kondisional di jaringan:

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

Semoga berhasil! Saya belum menguji ini, jadi "jarak tempuh Anda mungkin beragam".

Sumber:

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.