बूट पर कई बार / आदि / नेटवर्क / इंटरफेस में पोस्ट-अप कमांड क्यों हैं?


10

यहाँ की सामग्री है /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart

और sshstartइसमें निम्नलिखित के साथ एक स्क्रिप्ट है:

curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 username@17.16.15.2 -p 8080

जब मशीन रिबूट होती है, तो curlकमांड को कई बार निष्पादित किया जाता है, फाइल एफ़टीपी सर्वर पर 2 या 3 बार समाप्त होती है और जब मैं प्रक्रियाओं को देखता हूं तो ऐसा लगता है कि ऑटोसह के कई उदाहरण चल रहे हैं ... सुनिश्चित नहीं हैं कि यह कैसे है ऑटॉश चीजें करता है या नहीं, लेकिन यह सुनिश्चित करने के लिए कि कर्ल को कई बार फाइल अपलोड नहीं करनी चाहिए।

मेरा कूबड़ यह है कि पूरी sshstartस्क्रिप्ट कई बार चलाई जाती है लेकिन मुझे समझ नहीं आता कि क्यों।

मैंने बूट पर नेटवर्क सेटअप प्रक्रिया के विवरण की खोज करने की कोशिश की, लेकिन सभी मुझे मिल सकती है इंटरफेस फ़ाइल के लिए सिंटैक्स जानकारी।

क्या कोई कृपया मदद कर सकता है?

धन्यवाद।

--- संपादित करें ---

जैसा कि सुझाया गया bellow मैंने अपनी इंटरफेस फाइल को अनुसरण के रूप में संशोधित किया है (पोस्ट-अप के ऊपर की खाली रेखाओं को हटा दिया गया है):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart

और sshstart में निम्नलिखित पंक्ति जोड़ी:

echo $(date)>>/run/shm/sshstart.log

यहाँ /run/shm/sshstart.logएक रिबूट के बाद की सामग्री है :

Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014

तो इसके 4 बार भाग गया :( क्या चल रहा है?


1
संकेत: लो सेट करता है अगर-अप करने के लिए सच है, और eth0 भी इसे सच करने के लिए सेट करता है। पोस्ट-अप हर एक के सेट होने के बाद चलता है। आपकी स्क्रिप्ट को केवल 1 इंटरफ़ेस पर निर्भर होने की आवश्यकता है, दोनों पर नहीं।
18

मैंने सोचा कि यह कुछ ऐसा हो सकता है, आरटीएफएम को इसके समय का अनुमान लगाएं।
TCZ8

मैंने चारों ओर जाँच की है और मुझे पता नहीं है कि पोस्ट-अप कमांड के लिए कौन सा एडेप्टर निर्दिष्ट करना है, लगता है कि एक "श्लोक" के साथ कुछ करना है, लेकिन मुझे यह बिल्कुल नहीं मिलता है। डेबियन और उबंटू इंटरफेस पेज की काफी जानकारी है लेकिन उन्होंने उस हिस्से को छोड़ दिया।
TCZ8

1
प्रश्न से संबंधित नहीं है, लेकिन BTW echo $(date)थोड़े अजीब और अप्रत्यक्ष है। के रूप में अच्छी तरह से बस के रूप में है कि जादू कर सकते हैं dateकैट अवार्ड के बेकार उपयोग के समान ।
Celada

hahaha! तुम पूरी तरह ठीक हो! मुझे कोई सुराग नहीं है कि मैंने ऐसा क्यों किया है: P
TCZ8

जवाबों:


13

जब भी कोई इंटरफ़ेस (कोई इंटरफ़ेस) आता है तो फ़ाइलें /etc/network/if-up.d पहले से ही स्वचालित रूप से चलती हैं जब आप एक ही स्क्रिप्ट को फिर से एक स्पष्ट post-upकमांड में चलाने के लिए निर्दिष्ट करते हैं , तो आप केवल स्क्रिप्ट को फिर से चलाने का कारण बनते हैं। तो मेरा अनुमान है कि ऐसा ही होना चाहिए:

  • यह एक बार loआता है जब (पर्यावरण चर के साथ IFACE=lo) ऊपर स्थित होने के कारण आता है /etc/network/if-up.d
  • यह एक बार जब एक ही कारण के लिए eth0(पर्यावरण चर के साथ IFACE=eth0) आता है ।
  • यह फिर से चलता है जब eth0ऊपर आता है (पर्यावरण चर IFACEunset के साथ) क्योंकि आपने एक post-upनिर्देश में इसके लिए कहा था।

मुझे यकीन नहीं है कि चौथी बार कहाँ से आता है, लेकिन वैसे भी यह तीन पहले से ही है।

आपको या तो स्क्रिप्ट का कहीं और पता लगाने की जरूरत है और एक post-upनिर्देश का उपयोग करके इसे चलाएं , या इसे छोड़ दें जहां यह है, लेकिन इसे एक post-upनिर्देश में उल्लेख न करें और इसके मूल्य की जांच करें $IFACEजब तक कि वांछित इंटरफ़ेस ( eth0) नहीं आया हो। यूपी।


ओह मैन! आखिरकार! आप बिलकुल सही कह रहे हैं, मैंने अभी अपनी लॉग फ़ाइल में $ IFACE को इको करने के लिए sshstart में एक लाइन जोड़ी है और ठीक उसी तरह जैसे आपने इसे वर्णित किया है! 1 समय लो है, 2 वाँ समय eth0 है, 3rd है eth0 फिर से (फॉर्म-अप के बाद) और 4 वाँ समय इतना स्पष्ट नहीं है .. $ IFACE का 4 वें समय का मान है: - और आप जानते हैं कि क्या होगा माध्यम? बस जिज्ञासा से :)
TCZ8

1
मैं नहीं जानता था --all। ऐसा लगता है कि if-up.dइस तर्क के साथ पिछली बार लिपियों को चलाने के लिए एक विशेषता है जो यह संकेत देने के लिए है कि सभी इंटरफेस अब ऊपर हैं, यदि कोई स्क्रिप्ट एक बार कार्रवाई करना चाहती है तो यह ज्ञात हो जाता है कि आगे कोई इंटरफेस लंबित नहीं हैं। वह चौथी बार समझाता है।
Celada

यह समझ में आता है, आपकी सभी मदद के लिए धन्यवाद!
TCZ8

3

सेलडा द्वारा कहा गया है, /etc/network/if-up.dस्क्रिप्ट प्रत्येक इंटरफ़ेस के लिए चलाए जाते हैं। नियम दोहराव से बचने के लिए बस जोड़ें:

[ "$IFACE" = "eth0" ] || exit 0

आपकी स्क्रिप्ट के शीर्ष पर। यदि स्क्रिप्ट वांछित नहीं है, तो यह स्क्रिप्ट से तुरंत बाहर निकलने का कारण होगा।


1

post-up-कैंड से पहले खाली लाइन हटाएं । यह केवल post-upकमांड से संबंधित होना चाहिए eth0। इसके अलावा अपनी स्क्रिप्ट को if-up.dफ़ोल्डर से बाहर ले जाएं । उस फ़ोल्डर में लिपियों को स्वचालित रूप से निष्पादित किया जाता है, चाहे कोई भी परिभाषित किया गया हो post-up। आपके मामले में यह आपके post-up-कमांड पर अतिरिक्त रूप से चलेगा।


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