डेबियन - स्टार्टअप पर स्क्रिप्ट कैसे चलाएं जैसे ही उपयोग के लिए इंटरनेट कनेक्शन तैयार है?


14

मैं डेबियन 7 व्हीजी चला रहा हूं और जैसे ही पूरी तरह कार्यात्मक इंटरनेट कनेक्शन है, मुझे स्टार्टअप पर कुछ स्क्रीन शुरू करने की आवश्यकता है। हालांकि, नहीं, अगर इंटरनेट कनेक्शन टूट गया और फिर से जुड़ा हुआ था। तो केवल बूट के बाद पहले कार्यात्मक इंटरनेट कनेक्शन पर।

क्या आप इसके लिए एक डमी स्क्रिप्ट पोस्ट कर सकते हैं और मुझे बता सकते हैं कि इसे कहाँ रखा जाए और इसे दिए गए शर्तों के तहत निष्पादित किया जाए?

स्क्रिप्ट को केवल स्क्रीन शुरू करने और उसके बाद समाप्त करने की आवश्यकता है लेकिन स्क्रीन को जारी रखना चाहिए।


EDIT मैंने पहले ही /etc/network/if-up.d/फ़ोल्डर के बारे में सुना है । लेकिन मैं यह कैसे सुनिश्चित कर सकता हूं कि यदि इंटरनेट कनेक्शन खो गया है और फिर फिर से स्थापित किया गया है तो स्क्रिप्ट को फिर से निष्पादित नहीं किया जाता है?


@ कैलादा कृपया संपादित देखें
MinecraftShamrock

जवाबों:


21

अपनी स्क्रिप्ट को अंदर रखें /etc/network/if-up.dऔर इसे निष्पादन योग्य बनाएं। यह हर बार नेटवर्क इंटरफ़ेस आने पर स्वचालित रूप से चलाया जाएगा।

यह काम करने के लिए केवल पहली बार यह हर बूट पर चलाया जाता है, क्या यह एक फ्लैग फ़ाइल के अस्तित्व की जांच करता है जिसे आप पहली बार बनाते हैं। उदाहरण:

#!/bin/sh

FLAGFILE=/var/run/work-was-already-done

case "$IFACE" in
    lo)
        # The loopback interface does not count.
        # only run when some other interface comes up
        exit 0
        ;;
    *)
        ;;
esac

if [ -e $FLAGFILE ]; then
    exit 0
else
    touch $FLAGFILE
fi

: here, do the real work.

जब सर्वर बंद हो जाता है तो क्या फ्लैगइलेट को हटा दिया जाएगा?
MinecraftShamrock

1
हां, क्योंकि डेबियन /var/runएक अस्थिर फाइल सिस्टम (ए tmpfs) है। तो यह हर ताजा बूट पर खाली आने की गारंटी है।
सेलाडा

1
अच्छी पकड़। मुझे लगता है कि आपको वास्तव में अशुभ होना पड़ेगा, लेकिन मुझे लगता है कि हाँ, क्योंकि गर्म-प्लग वाले इंटरफेस को एक साथ लाया जा सकता है। तो मुझे लगता है कि आप परीक्षण-तब बनाने के बजाय इसे परमाणु रूप से कर सकते हैं, जो इसे सुरक्षित बना देगा, लेकिन जो मैं अपने सिर के ऊपर से आया था वह सुंदर नहीं है! python -c 'import os; os.open("/var/run/work-was-already-done", os.O_EXCL|os.O_CREAT, 0)' 2>/dev/null || exit 0
Celada

3
@MinecraftShamrock यदि आप सेलाडा की स्क्रिप्ट का उपयोग करते हैं, तो लूपबैक इंटरफ़ेस आते ही आपका कोड चलेगा। आप, इंटरनेट कनेक्टिविटी के लिए प्रतीक्षा करने में कम से कम जाँच लें कि चाहते हैं IFACEनहीं है loपिंग द्वारा या बेहतर, परीक्षण इंटरनेट कनेक्टिविटी के लिए - या कुछ आभासी इंटरफ़ेस -।
गिल्स एसओ- बुराई को रोकना '

1
@MinecraftShamrock $IFACEकिसी भी इंटरफ़ेस को मान सकता है जो ऊपर आता है। आप उन सभी इंटरफेसों को सूचीबद्ध कर सकते हैं, जिनके साथ मौजूद हैं ip linkया जिन पर स्कैनिंग द्वारा लाए जाने के लिए कॉन्फ़िगर किया गया है/etc/network/interfaces
Cel46

9

यह एक बहुत अच्छी तरह से काम के लिए अनुकूल है systemd

एक स्क्रिप्ट को एक सिस्टमड सर्विस के रूप में चलाना

यदि आपका सिस्टम systemd चल रहा है , तो आप अपनी स्क्रिप्ट को एक systemd सेवा के रूप में चलाने के लिए कॉन्फ़िगर कर सकते हैं जो जीवनचक्र और निष्पादन परिवेश पर नियंत्रण प्रदान करती है, साथ ही स्क्रिप्ट को शुरू करने के लिए पूर्व शर्त, जैसे कि नेटवर्क का उठना और चलाना।

आपकी अपनी सेवाओं के लिए अनुशंसित फ़ोल्डर /etc/systemd/system/(एक अन्य विकल्प यह है /lib/systemd/systemकि आम तौर पर केवल ओओटीबी सेवाओं के लिए उपयोग किया जाना चाहिए)।

फ़ाइल बनाएँ जैसे sudo vim /etc/systemd/system/autossh.service:

[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

अब आप सेवा का परीक्षण कर सकते हैं:

sudo systemctl start autossh

सेवा की स्थिति की जाँच:

systemctl status autossh

सेवा को रोकना:

sudo systemctl stop autossh

एक बार जब आप सत्यापित कर लेते हैं कि सेवा अपेक्षित रूप से काम करती है, तो इसे सक्षम करें:

sudo systemctl enable autossh

नोट: सुरक्षा उद्देश्यों के systemdलिए स्क्रिप्ट को प्रतिबंधित वातावरण में चलाया जाएगा, स्क्रिप्ट कैसे crontabचलाए जाते हैं, इसलिए $ PATH जैसे पूर्व-मौजूदा सिस्टम चर के बारे में कोई धारणा नहीं बनाते हैं। Environmentयदि आपकी स्क्रिप्ट को परिभाषित करने के लिए विशिष्ट चर की आवश्यकता है, तो कुंजियों का उपयोग करें । set -xअपनी बैश स्क्रिप्ट में सबसे ऊपर जोड़ना और फिर दौड़ना systemctl status my_serviceयह पहचानने में मदद कर सकता है कि आपकी स्क्रिप्ट विफल क्यों हो रही है। एक नियम के रूप में, हमेशा सब कुछ सहित पूर्ण पथ का उपयोग करें echo, या स्पष्ट रूप से जोड़कर अपने $ पथ को परिभाषित करें Environment=MYVAR=abc


2

इंटरनेट कनेक्शन /etc/rc6.d/शायद एक प्रविष्टि द्वारा लाया जाता है S35networking। आप उस फ़ाइल को बदलते हैं और अंत में अपने आदेशों डालें, या बेहतर एक जोड़ने /etc/init.d/mystuffऔर लिंक /etc/rc0.d/S36mystuffयह करने के लिए और वहाँ अपने आदेश डालें, तो है कि जैसे ही नेटवर्क है शुरू कर देंगे।


क्या कनेक्शन खो जाने और फिर से स्थापित होने पर इसे कॉल किया जाएगा? क्योंकि अन्यथा मैं सिर्फ स्क्रिप्ट डाल सकता था/etc/network/if-up.d
MinecraftShamrock

यह केवल स्टार्टअप पर नहीं है
एंथन

1
यह काम करेगा, लेकिन सिर्फ शुद्धता के लिए मुझे यह बताना चाहिए कि /etc/rc0.dस्टार्टअप में कोई स्क्रिप्ट नहीं चलेगी, वे शटडाउन पर चलेंगे (रन स्तर 0)। स्टार्टअप में यह कुछ-न-कुछ /etc/rc2.dसमान होगा। विशेष रूप से ओपी के डेबियन मट्ज़ी के लिए, यह /etc/rcS.d/S12networking। यह सभी एक ही फाइल के लिए सहानुभूति रखता है, निश्चित रूप से। इसके अलावा बीटीडब्लू @ एंथन मेरे जवाब को ठीक करने के लिए धन्यवाद: "पुट" के बजाय "कृपया"? क्या अजीब टाइपो है!
Celada

@Celada आपका अधिकार मेरे (गैर-डेबियन सिस्टम) पर rc6 है। मुझे यकीन नहीं था कि अगर आप वहां 'प्लीज पुट' चाहते हैं, लेकिन सिर्फ "पुट" अधिक खस्ता लग रहा था। BTW मैंने आपके जवाब को बढ़ा दिया है, यह नेटवर्किंग के लिए सिर्फ एक बेहतर तरीका है क्योंकि इसमें if-up.dजेनेरिक तंत्र है जो एक पुनर्संरचना पर भी काम करता है।
एंथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.