Cách chạy tập lệnh, tùy thuộc vào kết nối internet


48

Tôi thường gắn một ổ đĩa từ xa bằng sshfs. Tôi rất thích có tự động gắn kết này. Tuy nhiên, nếu tôi gắn kết nó vào .bashrc hoặc tập lệnh khởi động, việc gắn kết thường không thành công do kết nối internet không dây của tôi chưa được thực hiện.

Có ai biết một cách dễ dàng để thực hiện một bash scrip mỗi khi kết nối được thực hiện, hoặc để tự động gắn ổ đĩa sshfs không?

Câu trả lời:


56

Thêm tập lệnh của bạn vào /etc/network/if-up.d/. Đặt tên cho tập lệnh của bạn mà không có phần mở rộng '.sh'.

Ngoài ra sau khi thêm tập lệnh chạy chmod +x /etc/network/if-up.d/yourscriptnameđể cho phép cần thiết.

Đảm bảo giao diện mạng (ví dụ: wlan0 hoặc eth0) sẽ kích hoạt tập lệnh của bạn khi bật được đề cập trong tệp /etc/network/interfaces.


12
bên trong các tập lệnh trong /etc/network/*.d/bạn có thể sử dụng biến $IFACEđể biết giao diện nào đang nhận kết nối để bạn có thể bỏ qua quy trình nếu đó là kết nối có dây chẳng hạn.
Carlos Campderrós

Có cách nào để xác định mạng cụ thể mà bạn muốn làm điều này không? Khi đó là mạng gia đình của tôi, tôi muốn thực hiện kịch bản nhưng khi tôi kết nối mạng và tôi có thể không muốn ...
Joshua Robison

3
điều này thực sự dường như không hoạt động. Tôi biết các tập lệnh của tôi hoạt động vì tôi có thể chạy chúng bằng cách sử dụng ./ trong thiết bị đầu cuối và chúng hoạt động nhưng khi tôi tắt và kết nối, các tập lệnh không được gọi. Có điều gì tôi phải làm để tham khảo chúng trong một ngày nào đó không? bỏ tập lệnh trong if-up.d dường như đang thiếu một bước?!?!
Joshua Robison

1
kiểm tra xem họ có đúng quyền không.
depunumax

2
Vui lòng thêm chính xác những gì nên đi vào interfaceskhi nó không có ở đó. Là nó auto wlan0iface wlan0 inet dhcphoặc sth khác?
Cookie

25

Lưu ý của biên tập viên: Mực nang đã không được cập nhật từ năm 2012 và không có trong bất kỳ kho lưu trữ Ubuntu hiện tại nào

Ubuntu 12.04

  • Cài đặt Mực nang : Một công cụ đơn giản, thực hiện phản xạ trên máy tính của bạn bằng cách thực hiện các hành động khi các sự kiện cụ thể được kích hoạt.
  • Mở Mực nang và bấm vào New.

    Bước 1

    • Đặt tên cho nó và thay đổi Kích hoạt bằng tùy chọn kích thích thành BẬT.
    • Nhấp vào Kích thích , chọn danh mục Mạng và nhập Kết nối với mạng WLAN . Nhấn OK.

    Bước 2

    • Bạn cũng có thể chọn SSID của mạng không dây và bạn có tùy chọn xem có nên kiểm tra điều này khi khởi động hay không.

    Bước 3

    • Bây giờ bạn sẽ phải xác định một phản ứng. Chuyển đến tab Reaction và nhấp vào thêm. Chọn Ứng dụng từ danh mục và Bắt đầu Ứng dụng (ở chế độ nâng cao) từ loại.

    Bước 4

    • Bây giờ chỉ định tập lệnh mà bạn muốn chạy trong tùy chọn thực thi. Bạn thậm chí có thể truyền tham số cho tập lệnh.

    Bước 5

    • Và đó là nó! Đồng thời đảm bảo rằng bạn thêm Mực nang trong các ứng dụng khởi động. Chuyển đến Chỉnh sửa> Tùy chọn và bật tùy chọn tự động khởi động.

    Bước 6


6
Mực nang bị hỏng hoàn toàn và đôi khi không thấy cập nhật. Tôi ước nó có thể phát triển hơn nữa vì chúng ta cần thứ gì đó như ứng dụng Tasker của Android cho Linux. Không ai muốn gây rối với etc / mạng / giao diện và các thư mục và tập lệnh if-up. Chỉ cần đưa cho tôi một cái gì đó tôi có thể nhấp hoặc bật và tắt.
Joshua Robison

2

Tôi sẽ trả lời phần này của câu hỏi OP: "Tôi rất thích có tự động gắn kết này"

Công cụ yêu thích của tôi để tự động chia sẻ mạng là autofs: https://help.ubfox.com/community/Autofs

AutoFS là công cụ lựa chọn của tôi để gắn NAS của tôi - cho tất cả máy tính xách tay và máy trạm của tôi.

" autofs là một chương trình để tự động gắn các thư mục trên cơ sở khi cần thiết. Tự động gắn kết chỉ được gắn khi chúng được truy cập và không bị ngắt kết nối sau một thời gian không hoạt động. hiệu suất tổng thể so với gắn kết tĩnh thông qua fstab. "


Câu trả lời của bạn trong khi có thể có thể hơi muộn vì OP đã chấp nhận câu trả lời khác. Sự giúp đỡ của bạn tất nhiên được đánh giá cao, tuy nhiên bạn có thể được phục vụ tốt hơn bằng cách tập trung nỗ lực vào các câu hỏi chưa được trả lời
Wayne_Yux

Xin lỗi Wayne, RBell đã có tiếng cười cuối cùng ở đây - câu trả lời hay nhất (về việc sử dụng Mực nang) không còn phù hợp vì gói đó đã lỗi thời - nhưng tự động vẫn tồn tại và tôi đã không thấy nó nếu không có bài đăng này. Cảm ơn, RBell!
KlaymenDK

1

Cách tốt nhất, đơn giản và dễ dàng là thêm một lệnh up vào giao diện mà bạn muốn làm việc trên đó.

Các giao diện có thể được tìm thấy trong thư mục "/ etc / network /" dưới tên tệp "giao diện"

iface elan0 inet manual
    up filename.sh

Điều này sẽ thêm lệnh up vào elan0. Simillarly cung cấp điều này cho những gì bạn muốn làm việc trên giao diện. Nhớ thụt lề một tab.

Hãy chắc chắn rằng bạn cung cấp quyền thực thi cho tệp.

sudo chmod 755 filename.sh

1
Tuyệt vời! Hoạt động với tun0giao diện VPN được quản lý bởi network-manager. Điều quan trọng là việc sử dụng inet manual.
KrisWebDev

1

Theo như tôi quan tâm, /etc/network/if-up.d/giải pháp không hoạt động với tôi như khi tôi thêm vào /etc/network/interfacesnhư sau:

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

Wifi sẽ bắt đầu sau khi khởi động lại.

Nhưng sau một vài cuộc đấu tranh, từ liên kết này , điều làm việc là thêm tập lệnh /etc/NetworkManager/dispatcher.d/vào dạng 90myscript.sh90mức độ ưu tiên của tập lệnh và với dạng sau:

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

Tôi đoán có những vấn đề giữa những người kiểm soát cấu hình mạng ở cấp hệ thống và đôi khi networkhành vi mặc định bị bỏ lại phía sau bộ điều phối.

Ngoài ra, đối với những người muốn - như tôi - cố gắng có một liên kết tượng trưng đến tập lệnh (để lưu trữ tệp ở vị trí tốt hơn), thật không may, nó không hoạt động với tôi.

Hi vọng điêu nay co ich!


1

systemd dường như đã chiếm lĩnh mạng lưới ngày nay.

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

Nó cũng có các đơn vị tương ứng với các giao diện

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

Rõ ràng bạn có thể sử dụng chúng trong các tập tin đơn vị dịch vụ. Vì vậy, chỉ cần tạo một đơn vị dịch vụ để chạy tập lệnh của bạn và sử dụng một cái gì đó giống như bên trong để làm cho nó chạy có điều kiện trên mạng:

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

Chúc may mắn! Tôi chưa thử nghiệm điều này, vì vậy "số dặm của bạn có thể thay đổi".

Nguồn:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.