回答:
このウェブページから:
/etc/rc.local
現在のランレベルの完了後にコマンドが実行される(またはディストリビューションの同等の)ethtoolコマンドを入力できますが、これは理想的ではありません。ランレベル中にネットワークサービスが開始された可能性があり、ethtoolコマンドはネットワークトラフィックを中断する傾向があります。インターフェイスが立ち上がるときにコマンドを適用する方が望ましいでしょう。
CentOSのネットワークサービスには、これを行う機能があります。スクリプト/etc/sysconfig/network-scripts/ifup-post
が存在するかどうかを確認/sbin/ifup-local
し、それが存在する場合は、パラメータとしてインターフェイス名とそれを実行します(例:/sbin/ifup-local eth0
)
このファイルをtouchで/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
これにより、ループバックを含むすべてのインターフェイスに設定を適用しようとすることに注意してください。
異なるインターフェイスを使用して、異なる設定を適用する場合、またはループバックをスキップする場合は、caseステートメントを作成できます
#!/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
現在、ethtool設定はインターフェイスの起動時に適用され、ネットワーク通信の潜在的な中断はすべてインターフェイスの起動時に行われ、サーバーは完全なネットワーク機能で起動を継続できます。
/ etc / sysconfig / network-scripts / ifcfg- *にあるRHEL7の場合、次のものがあります。
ETHTOOL_OPTS = "-K $ {DEVICE} gso off gro off tso off"
さらにオプションがあれば、likeを使用します
ETHTOOL_OPTS = "-K $ {DEVICE} gso off; -K $ {DEVICE} gro off; -K $ {DEVICE} tso off"
ifcfgファイルでDEVICEを自然に定義する必要があります。
rc.localも追加のifupスクリプトも必要ありません。汎用展開システムで簡単に行えます。
あなたは上にある場合RHEL7(または同様)と使用ネットワークマネージャを代わりにの/etc/init.d/networkいるため、提案答えは動作しませんあなたのインタフェースを制御するために/ sbinに/ ifupのローカル(同様にifdownを-あらかじめローカルそして、ifdownをローカルで)実行されることはありません飽きないだろう。
代わりに、スクリプトを/etc/NetworkManager/dispatcher.d/に置き、NetworkManager-dispatcherサービスが有効になっていることを確認します
systemctl enable NetworkManager-dispatcher
ヒント:ディスパッチャは、NetworkManagerがインターフェイスに変更を加えた場合にのみ作動します。実行する必要はないため、ステータスが
Active: inactive (dead)
それは完全に大丈夫です!
また、スクリプトが以下であることを確認してください。
これで、NetworkManagerは2つの変数をディスパッチャーに渡します。
インターフェイスである$ 1(eno16777984、eth0、ppp0など)
ステータスを保持している$ 2(upまたはdown)
また、スクリプトをチェーン化して(/ etc / rc ...と同様)、ディスパッチャが実行する順序を制御できます。
10-first、20-secondなど...
注文は接続時に昇順になります
[$ 2 = "up"]の場合、最初の10秒に続いて20秒
切断時に下降
[$ 2 = "down"]の場合、20秒後に10秒が続きます
等々。
OPが探していたものを達成するには、次のようなものを置くことができます。
#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
/sbin/ethtool --offload eth0 tso off
fi
で/etc/NetworkManager/dispatcher.d/20-ethtool
そして、それを一日と呼びます。
乾杯
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
ボンディングされたインターフェイスを使用していたため、受け入れられた回答(私は急いで追加しましたが、非常に役立ちました)で問題に遭遇しました。
何が起こっているのかを発見するのに少し時間がかかりましたが、ボンドを起動するとき、またはボンドスレーブを個別に起動するときでさえifup-local
、スレーブインターフェイスに対してスクリプトが呼び出されないことがわかりました。これは、スレーブインターフェイスにIPアドレスが割り当てられていないためだと思います。
これ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
注意:/ proc / net / bonding / bondXの内容は、RedHat / Fedora / CentOSのバージョンによって、スクリプトを作成したときに使用していたものと異なる場合があるため、スレーブインターフェイス名を引き出すコマンドが機能しない場合があります。
私のようにここに来たUbuntuユーザーのために、これはメモとしてオフトピックです:
Ubuntuの場合、教科書では、/ etc / network / interfacesファイルを編集して、init.d / pre-up -upなどのスクリプトで順番に読み取ります。したがって、/ etc / network / interfacesファイルは次のようになります。
auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full
それはドキュメントが言っていることですが、動作しません。準備スクリプトと起動スクリプトの解析ロジックは少し古く、インターフェイスファイルから必要な設定を解析しない可能性があります。わからない。少なくとも、私にとってはうまくいきませんでした。
そのため、今のところハックっぽいが動作する解決策は、ローカルの/etc/rc.localファイルを作成/編集し、そこにコマンドを出力することです(ただし、インターフェースが既に確立された後、数秒間ネットワークが中断する可能性があることに注意してください)育った)。だからこれを持っている:
ethtool -s eth0 speed 10二重全自動オン
/etc/rc.localの上に意図したとおりのインタフェースを遅くする作業溶液です。
上のUbuntu 17.04と上記
最近のUbuntuではSystemdを使用しているため、たとえば、「開始」ランレベルに達したときにrc.localファイルが実行されるとは限りません。「rc-local」サービスを有効にする必要があります。デフォルトのようですが、後方互換性の理由から、おそらく-でステータスを確認してくださいsudo systemctl status rc-local
pre-up
指令は、TSOフラグを設定するためにLinux Mint 17.3で機能しました。ありがとう
Ubuntuの場合、次の行を追加することでこれを実行できます/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はオフになります。