जवाबों:
इस वेबपेज से :
आप /etc/rc.local
(या आपके वितरण के समतुल्य) एथलूल कमांड दर्ज कर सकते हैं, जहाँ करंट रनवेवेल पूरा होने के बाद कमांड चलते हैं, लेकिन यह आदर्श नहीं है। रनरवेल के दौरान नेटवर्क सेवाएं शुरू हो सकती हैं और एथलूल कमांड नेटवर्क ट्रैफिक को बाधित करते हैं। इंटरफ़ेस लागू होते ही कमांड को लागू करना अधिक बेहतर होगा।
CentOS में नेटवर्क सेवा ऐसा करने की क्षमता रखती है। स्क्रिप्ट /etc/sysconfig/network-scripts/ifup-post
के अस्तित्व की जाँच करता है /sbin/ifup-local
, और यदि यह मौजूद है, तो इसे एक पैरामीटर के रूप में इंटरफ़ेस नाम से चलाता है (उदाहरण के लिए /sbin/ifup-local eth0
)
हम इस फाइल को टच के साथ बना सकते हैं /sbin/ifup-local
और इसे chmod +x /sbin/ifup-local
इसके SELinux संदर्भ के साथ निष्पादन योग्य बना सकते हैं chcon --reference /sbin/ifup /sbin/ifup-local
और फिर इसे एक संपादक में खोल सकते हैं।
सभी इंटरफेस के लिए एक ही सेटिंग लागू करने के लिए एक सरल स्क्रिप्ट कुछ इस तरह होगी
#!/bin/bash
if [ -n "$1" ]; then
/sbin/ethtool -G $1 rx 4096 tx 4096
/sbin/ethtool -K $1 tso on gso on
fi
ध्यान रखें कि यह सभी इंटरफेस पर सेटिंग लागू करने का प्रयास करेगा, यहां तक कि लूपबैक भी।
यदि हमारे पास अलग-अलग इंटरफेस हैं, तो हम लूपबैक को अलग-अलग सेटिंग्स लागू करना चाहते हैं या छोड़ना चाहते हैं, हम एक केस स्टेटमेंट बना सकते हैं
#!/bin/bash
case "$1" in
eth0)
/sbin/ethtool -G $1 rx 16384 tx 16384
/sbin/ethtool -K $1 gso on gro on
;;
eth1)
/sbin/ethtool -G $1 rx 64 tx 64
/sbin/ethtool -K $1 tso on gso on
/sbin/ip link set $1 txqueuelen 0
;;
esac
exit 0
अब एथलेट सेटिंग्स को इंटरफेस में लागू किया जाता है क्योंकि वे शुरू करते हैं, नेटवर्क संचार के लिए सभी संभावित रुकावटें होती हैं क्योंकि इंटरफ़ेस को लाया जाता है, और आपका सर्वर पूर्ण नेटवर्क क्षमताओं के साथ बूट करना जारी रख सकता है।
RHEL7 in / etc / sysconfig / network-script / ifcfg- * के लिए आपके पास हो सकता है:
ETHTOOL_OPTS = "- K $ {DEVICE} ग्रॉस ऑफ ग्रॉस ऑफ ट्सू ऑफ"
यदि अधिक विकल्प हैं तो उपयोग करें
ETHTOOL_OPTS = "- K $ {DEVICE} को बंद करें? -K $ {DEVICE} को बंद करें; -K $ {DEVICE} को बंद करें"
आपको अपनी ifcfg फ़ाइल में स्वाभाविक रूप से परिभाषित DEVICE रखना होगा।
कोई rc.local और न ही अतिरिक्त ifup स्क्रिप्ट की जरूरत है। सामान्य तैनाती प्रणालियों में आपके लिए आसान है।
यदि आप RHEL7 (या एक जैसे) पर हैं और अपने इंटरफेस को नियंत्रित करने के लिए /etc/init.d/network के बजाय नेटवर्क मैनेजर का उपयोग करते हैं, तो प्रस्तावित जवाब काम नहीं करेगा, क्योंकि / sbin / ifup- लोकल (साथ ही ifdown-pre-local) और ifdown- स्थानीय ) कभी भी निष्पादित नहीं होगा।
इसके बजाय अपनी स्क्रिप्ट /etc/NetworkManager/dispatcher.d/ में डालें और सुनिश्चित करें कि NetworkManager-dispatcher सेवा सक्षम है
systemctl enable NetworkManager-dispatcher
संकेत: नेटवर्क प्रबंधक एक इंटरफ़ेस में परिवर्तन करने के बाद डिस्पैचर को केवल किक करेगा, इसे चलाने या कुछ भी करने की आवश्यकता नहीं है, इसलिए यदि स्थिति पढ़ती है
Active: inactive (dead)
यह पूरी तरह से ठीक है!
यह भी सुनिश्चित करें कि आपकी स्क्रिप्ट है:
अब NetworkManager डिस्पैचर को दो (2) चर पास करेगा:
$ 1 इंटरफ़ेस जा रहा है ( eno16777984 , eth0 , ppp0 , आदि ...)
$ 2 स्थिति को पकड़े (या तो ऊपर या नीचे )
और यह लिपियों (जैसे / / / आरसी ...) का पीछा करने की अनुमति देता है, जिसमें डिस्पैचर उन्हें निष्पादित करेगा उस क्रम पर कुछ नियंत्रण होगा:
10-पहले, 20-सेकंड और इतने पर ...
आदेश एक कनेक्ट पर आरोही होगा
अगर [$ 2 = "ऊपर"] इसके 10-पहले 20 सेकंड के बाद
और एक डिस्कनेक्ट पर उतर रहा है
अगर [$ 2 = "डाउन"] आपको 10 सेकंड के बाद 20 सेकंड मिलता है
और इसी तरह।
इसलिए यह पूरा करने के लिए कि ओपी आपको किस चीज़ की तलाश में था:
#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
/sbin/ethtool --offload eth0 tso off
fi
in /etc/NetworkManager/dispatcher.d/20-ethtool
और इसे एक दिन कहते हैं।
चियर्स
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
मैं स्वीकृत उत्तर के साथ समस्याओं में भाग गया (जो, मैं जोड़ने की जल्दबाजी करता हूं, मुझे बहुत मदद मिली) क्योंकि मैं बंधुआ इंटरफेस का उपयोग कर रहा था।
मुझे यह पता लगाने में थोड़ा समय लगा कि क्या हो रहा है, लेकिन मैंने पाया कि जब एक बंधन लाया जाता है, या यहां तक कि जब एक बंधन दास को व्यक्तिगत रूप से लाया जाता है, तो ifup-local
स्क्रिप्ट को दास इंटरफेस के लिए नहीं बुलाया जाएगा। मुझे लगता है कि यह इसलिए है क्योंकि दास इंटरफेस के पास उनके पास कोई आईपी पते नहीं हैं।
इसे प्राप्त करने के लिए मैंने अपने इंटरफ़ेस ifup-local
की सामग्री को पार्स करने के लिए संशोधित /proc/bonding/bondX
किया, जिसे लाया गया था, अगर यह एक बंधन था, दास इंटरफ़ेस नाम पाने के लिए, और फिर उनके साथ आवश्यक सामान किया।
अंत में मेरा ifup-local
निम्नलिखित की तरह लग रहा था:
#!/bin/bash
if [ -n "$1" ]
then
IFACE="$1"
# If interface is physical
if [[ $IFACE =~ ^eth[0-9]+$ ]]
then
# Do whatever you need for a physical interface here
# example below
/sbin/ethtool -K $IFACE rx off
# Else if it's a bond
elif [[ $IFACE =~ ^bond[0-9]+$ ]]
then
# Do whatever you need for the bond here
# example below
/sbin/ethtool -K $IFACE gso off
# Now deal with slaves
# Pull out slave interface names from /proc/net/bonding/bondX
SLAVES=$(/bin/grep -oP "Slave Interface: \K(eth[0-9]+)" /proc/net/bonding/$IFACE)
for SLAVE in $SLAVES
do
# Do whatever you need with the slave here
# example below
/sbin/ethtool -K $SLAVE tso off gso off
done
fi
fi
कैविएट: /हार्ट / नेट / बॉन्डिंग / बॉन्डएक्स की सामग्री रेडहैट / फेडोरा / सेंटोस के विभिन्न संस्करणों के लिए अलग हो सकती है, जिसका उपयोग मैं उस समय कर रहा था जब मैंने स्क्रिप्ट लिखी थी, इसलिए दास इंटरफ़ेस नामों को बाहर निकालने का आदेश काम नहीं कर सकता है। ।
उबंटू उपयोगकर्ताओं के लिए ऑफ-टॉपिक, जो यहां आए थे, मेरी तरह, यह नोट के रूप में:
उबंटू पर, ऐसा करने के लिए पाठ्यपुस्तक का तरीका / etc / नेटवर्क / इंटरफेस फ़ाइल को संपादित करना है जो बदले में init.d / pre-up -up, आदि स्क्रिप्ट द्वारा पढ़ा जाता है। तो / a / etc / network / interfaces file इस तरह दिख सकता है:
auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full
डॉक्स का यही कहना है, लेकिन यह काम नहीं करता है । हो सकता है कि प्री-अप और अप स्क्रिप्ट में पार्सिंग तर्क थोड़ा सा दिनांकित हो और वे इंटरफेस फाइल से आवश्यक सेटिंग्स को पार्स न करें। पता नहीं। कम से कम, यह मेरे लिए काम नहीं कर रहा था।
इसलिए हैक-ईश लेकिन अब के लिए काम कर रहा समाधान अभी भी एक स्थानीय /etc/rc.local फ़ाइल बनाना / संपादित करना है और कमांड को वहां से बाहर निकलने के लिए कहा गया है (लेकिन ध्यान दें कि यह इंटरफेस के पहले से ही एक सेकंड के लिए नेटवर्किंग को बाधित कर सकता है। परवरिश)। तो यह होने:
ethtool -s eth0 स्पीड 10 डुप्लेक्स फुल ऑटोनग ऑन
in /etc/rc.local ऊपर बताए अनुसार एक इंटरफ़ेस को धीमा करने के लिए काम कर रहा समाधान है।
पर उबंटू 17.04 और इसके बाद के संस्करण
अधिक हाल ही में Ubuntus Systemd का उपयोग करते हैं, और इस प्रकार r.local फ़ाइल आवश्यक रूप से 'स्टार्ट' रनवे तक पहुंचने पर निष्पादित नहीं होती है, उदाहरण के लिए। "आरसी-स्थानीय" सेवा को सक्षम करना होगा। यद्यपि यह डिफ़ॉल्ट रूप से लगता है, पश्चगामी संगतता कारणों के लिए, शायद - इसके साथ स्थिति की जांच करना सुनिश्चित करेंsudo systemctl status rc-local
pre-up
निर्देश, धन्यवाद :) त्सो ध्वज स्थापित करने के लिए लिनक्स टकसाल 17.3 पर मेरे लिए काम किया
मैंने पाया कि /etc/network/interfaces
वास्तव में उबंटू के लिए इस तरह का कॉन्फ़िगरेशन सेट करना (बशर्ते मैंने इसे बंद करने के लिए उपयोग किया हो large-receive-offload
, लेकिन यह वास्तव में कोई बात नहीं होनी चाहिए):
ऑटो eth1 iface eth1 inet स्थैतिक पता xxx.xxx.xxx.xxx netmask xx प्री-अप / sbin / ethtool -K $ IFACE को बंद करना
उबंटू के लिए, आप निम्न पंक्ति को इसमें जोड़कर ऐसा कर सकते हैं /etc/network/interfaces
:
auto eth0
iface eth0 inet static
[...]
post-up /sbin/ethtool -K eth0 tso off gso off gro off
यहाँ पोस्ट-अप विशिष्ट इंटरफ़ेस को लाने के बाद दिए गए ऑपरेशन को पूरा करेगा।
हाँ, यह फिलहाल विन्यास फाइल का उपयोग करके नहीं किया जा सकता है। आप इसमें कमांड डाल सकते हैं /etc/init.d/rc.local
और इसे किया जाना चाहिए।
उस फ़ाइल को बूटिंग अनुक्रम के अंतिम भाग में निष्पादित किया जाता है और इसलिए इंटरफ़ेस के लिए tso को बंद कर दिया जाएगा।