इंटरनेट कनेक्शन के आधार पर स्क्रिप्ट कैसे चलाएं


48

मैं अक्सर sshfs का उपयोग करके रिमोट ड्राइव माउंट करता हूं। मैं इस माउंट को स्वचालित रूप से रखना पसंद करूंगा। हालांकि, अगर मैं इसे अपने .bashrc या स्टार्टअप स्क्रिप्ट में माउंट करता हूं, तो माउंट अक्सर विफल हो जाता है क्योंकि मेरा वायरलेस इंटरनेट कनेक्शन अभी तक नहीं बना है।

क्या हर बार कनेक्शन बनाने, या ऑटो-माउंट करने के लिए एक sashfs ड्राइव को बैश विभाजन को निष्पादित करने का एक आसान तरीका पता है?

जवाबों:


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का उपयोग कर सकते हैं कि किस इंटरफ़ेस को कनेक्शन मिल रहा है ताकि आप प्रक्रिया को छोड़ सकें यदि यह उदाहरण के लिए वायर्ड कनेक्शन है।
कार्लोस कैंपडरो

क्या यह निर्दिष्ट करने का कोई तरीका है कि आप किस विशिष्ट नेटवर्क के लिए ऐसा करना चाहते हैं? जब यह मेरा होम नेटवर्क है, तो मैं स्क्रिप्ट करना चाहता हूं, लेकिन जब मैं एक नेटवर्क को बाहर निकालता हूं और मेरे बारे में नहीं चाहता ...
जोशुआ रॉबिसन

3
यह वास्तव में बिल्कुल काम नहीं करता है। मुझे पता है कि मेरी स्क्रिप्ट्स काम करती हैं, क्योंकि मैं उन्हें टर्मिनल में ./ का उपयोग करके चला सकता हूं और वे काम करते हैं लेकिन जब मैं कनेक्शन पर और टॉगल करता हूं, तो स्क्रिप्ट को बिल्कुल भी नहीं बुलाया जाता है। क्या ऐसा कुछ है जो मुझे किसी के संदर्भ में करना है? if-up.d में स्क्रिप्ट छोड़ने पर लगता है कि एक कदम की कमी है?!?
जोशुआ रॉबिसन

1
जाँच करें कि क्या उन्होंने सही अनुमतियाँ जमा की हैं।
समर्पण

2
कृपया जोड़ें कि interfacesजब वहाँ नहीं है तो वास्तव में क्या जाना चाहिए । यह auto wlan0और iface wlan0 inet dhcpया sth है?
कुकी

25

संपादक का ध्यान दें: Cuttlefish 2012 के बाद से अपडेट नहीं किया गया है और यह किसी भी वर्तमान Ubuntu रिपॉजिटरी में नहीं है

उबुन्टु 12.04

  • कटलफिश को स्थापित करें : एक साधारण उपकरण, जो विशिष्ट घटनाओं के ट्रिगर होने पर कार्यों को निष्पादित करके आपके कंप्यूटर पर सजगता का एहसास करता है।
  • Cuttlefish खोलें और पर क्लिक करें New

    चरण 1

    • इसे एक नाम दें, और प्रोत्साहन विकल्प द्वारा सक्रिय को बदल दें ।
    • स्टिमुलस पर क्लिक करें, श्रेणी नेटवर्क चुनें और कनेक्ट कनेक्ट WLAN । ओके पर क्लिक करें।

    चरण 2

    • आप वायरलेस नेटवर्क के एसएसआईडी का भी चयन कर सकते हैं और आपके पास स्टार्टअप पर यह जांचने या न करने का विकल्प है।

    चरण 3

    • अब आपको एक प्रतिक्रिया निर्दिष्ट करनी होगी। रिएक्शन टैब पर जाएं , और ऐड पर क्लिक करें। श्रेणी से एप्लिकेशन का चयन करें और प्रकार से एप्लिकेशन (उन्नत मोड में) प्रारंभ करें

    चरण 4

    • अब वह स्क्रिप्ट निर्दिष्ट करें जिसे आप निष्पादन योग्य विकल्प में चलाना चाहते हैं। आप स्क्रिप्ट के लिए पैरामीटर भी पास कर सकते हैं।

    कदम दर 5

    • और बस! यह भी सुनिश्चित करें कि आप स्टार्टअप अनुप्रयोगों में कटलफिश जोड़ें। संपादन> प्राथमिकताएं पर जाएं और ऑटोस्टार्ट विकल्प को सक्षम करें।

    कदम दर 6


6
cuttlefish पूरी तरह से टूट गया है और कुछ समय के लिए एक अद्यतन नहीं देखा है। मैं चाहता हूं कि इसे और अधिक विकास मिल सके क्योंकि हमें लिनक्स के लिए एंड्रॉइड के टास्कर ऐप की तरह कुछ चाहिए। कोई भी / नेटवर्क / इंटरफेस और अगर-फोल्डर और स्क्रिप्ट के साथ गड़बड़ नहीं करना चाहता है। बस मुझे कुछ ऐसा दें जिसे मैं क्लिक और टॉगल कर सकूं।
जोशुआ रॉबिसन

2

मैं ओपी प्रश्न के इस भाग का उत्तर दूंगा: "मुझे यह माउंट अपने आप पसंद आएगा"

नेटवर्क शेयरों को स्वचालित करने के लिए मेरा पसंदीदा उपकरण ऑटोफॉक्स है: https://help.ubuntu.com/community/Autofs

AutoFS मेरे NAS को माउंट करने के लिए मेरी पसंद का उपकरण है - मेरे सभी लैपटॉप और वर्कस्टेशन के लिए।

" ऑटोफॉल्स एक आवश्यक जरूरत के आधार पर स्वचालित रूप से बढ़ते निर्देशिकाओं के लिए एक कार्यक्रम है। ऑटो-माउंट केवल पहुंच के रूप में माउंट किए जाते हैं, और निष्क्रियता की अवधि के बाद अनमाउंट होते हैं। इस वजह से, एनएफएस / सांबा को स्वचालित करना बैंडविड्थ को बेहतर बनाता है और बेहतर प्रदान करता है। स्थिर प्रदर्शन की तुलना में समग्र प्रदर्शन fstab के माध्यम से। "


आपका उत्तर संभव हो सकता है, जबकि ओपी पहले ही दूसरे उत्तर को स्वीकार कर चुका हो। आपकी मदद निश्चित रूप से की सराहना की है, हालांकि आप अनुत्तरित सवालों
Wayne_Yux

क्षमा करें वेन, आरबेल को यहां आखिरी हंसी मिली - सबसे अच्छा जवाब (कटलफिश का उपयोग करने के बारे में) अब प्रासंगिक नहीं है, क्योंकि वह पैकेज पुराना है - लेकिन ऑटोफ्लो अभी भी मौजूद है, और मैंने इसे इस पोस्ट के लिए नहीं देखा था। धन्यवाद, RBell!
KlaymenDK

1

सबसे अच्छा, सरल और आसान तरीका यह होगा कि आप जिस भी इंटरफ़ेस पर काम करना चाहते हैं, उस पर एक कमांड जोड़ें।

फ़ाइल नाम "इंटरफेस" के तहत "/ etc / network /" निर्देशिका में इंटरफेस मिल सकते हैं

iface elan0 inet manual
    up filename.sh

यह अप कमांड को elan0 में जोड़ेगा। Simillarly इस पर क्या कभी इंटरफ़ेस आप काम करना चाहते हैं दे। एक टैब स्थान को इंडेंट करना याद रखें।

सुनिश्चित करें कि आप फ़ाइल को निष्पादित अनुमति देते हैं।

sudo chmod 755 filename.sh

1
बहुत खुबस! tun0द्वारा प्रबंधित वीपीएन इंटरफेस के साथ काम करता है network-manager। कुंजी का उपयोग है inet manual
क्रिशवेबदेव

1

जहाँ तक मेरा सवाल है, /etc/network/if-up.d/समाधान मेरे से काम नहीं किया जब मैंने /etc/network/interfacesनिम्नलिखित में जोड़ा :

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

रिबूट के बाद वाईफाई शुरू होगा।

लेकिन कुछ संघर्ष, से के बाद इस लिंक , क्या काम किया स्क्रिप्ट जोड़ने के लिए गया था /etc/NetworkManager/dispatcher.d/के रूप में 90myscript.shजहां 90स्क्रिप्ट की और निम्नलिखित फार्म के साथ प्राथमिकता के स्तर है:

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

सौभाग्य! मैंने इसका परीक्षण नहीं किया है, इसलिए "आपका लाभ भिन्न हो सकता है"।

सूत्रों का कहना है:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.