Làm cách nào tôi có thể kiểm tra kết nối internet trước khi chạy tập lệnh /etc/rc.local


8

Tôi muốn sử dụng Raspberry Pi làm cổng VPN. RPi kết nối với mạng gia đình của tôi và internet thông qua wlan0, andbất kỳ thiết bị nào được cắm vào để eth0có kết nối VPN. Tôi đang sử dụng pptp-linuxđể tạo kết nối VPN và mọi thứ đều hoạt động tốt trong giai đoạn tạo mẫu của tôi. Tuy nhiên, để hoàn thành dự án tôi đã đặt kết nối VPN vào /etc/rc.localtập lệnh để nó sẽ bắt đầu khi khởi động. Bây giờ nó thất bại 50% thời gian. Tôi nghi ngờ rằng nó đang thử kết nối VPN trước khi tôi kết nối internet đúng cách wlan0. Nếu đây là vấn đề, tôi cần kiểm tra kết nối internet hợp lệ vào đầu rc.localtrước khi tiếp tục với phần còn lại của tập lệnh. Bất kỳ ý tưởng như làm thế nào tôi có thể làm điều này?


Bạn có thể thêm một sleep 20trước tập lệnh của bạn. Hoặc tốt hơn, đặt kịch bản của bạn vào /etc/network/if-up.d. Bằng cách đó, tập lệnh được chạy khi giao diện mạng tăng lên.
Gerben

Câu trả lời:



4

ngay trên đỉnh đầu của tôi:

  1. ping bộ định tuyến của bạn

  2. ping google.com

  3. ifconfigđầu ra grep cho cổng hợp lệ và / hoặc địa chỉ IP hợp lệ


Bạn sẽ cần grepping để trả lời hợp lệ. Trong một vòng lặp while cho đến khi tất cả các điều kiện được đáp ứng. Chỉ cần ping sẽ không làm nhiều. Jivings trích dẫn một dòng mã tốt.
Piotr Kula

@ppumkin không cần sử dụng grep, ping sử dụng mã thoát để cho bạn biết về kết quả, đại loại nhưping -qc 1 192.168.1.1 && echo ok || echo error
lenik

4

Dựa trên mã mẫu của Jivings và một số logic của riêng tôi.

#!/bin/bash

STATE="error";

while [  $STATE == "error" ]; do
    #do a ping and check that its not a default message or change to grep for something else
    STATE=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error)

    #sleep for 2 seconds and try again
    sleep 2
 done

#put your VPN code here...

Cách thích hợp sẽ là tạo ra một hàm trả về một boolean trên bộ so sánh while. nhưng đây là cách logic vỏ nên như thế nào.


1

Debian bây giờ sử dụng mới bắt đầu. Đây có lẽ là một cách đơn giản hơn nhiều để thực hiện nó các tập lệnh init.d.

Bạn có thể cần thử một vài dịch vụ khác nhau để chờ đợi, nhưng networking(nếu có) hoặc network-managercó thể là một dịch vụ tốt để thử trước.

Cái này dành cho Ubuntu, nhưng bạn không nên tìm thấy quá nhiều sự khác biệt http://upstart.ubfox.com/cookbook/

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.