麒宝 發表於 2023-9-13 00:00:00

Linux下IP设置脚本的实例及遇到问题解决办法

<p>
        <strong>Linux下IP设置脚本的实例及遇到问题解决办法</strong></p>
<p>
        <strong>背景</strong></p>
<p>
             一个Java web项目有一个功能是IP修改,Linux的IP修改脚本如下:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_468831">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                        <div class="line number38 index37 alt1">
                                                                38</div>
                                                        <div class="line number39 index38 alt2">
                                                                39</div>
                                                        <div class="line number40 index39 alt1">
                                                                40</div>
                                                        <div class="line number41 index40 alt2">
                                                                41</div>
                                                        <div class="line number42 index41 alt1">
                                                                42</div>
                                                        <div class="line number43 index42 alt2">
                                                                43</div>
                                                        <div class="line number44 index43 alt1">
                                                                44</div>
                                                        <div class="line number45 index44 alt2">
                                                                45</div>
                                                        <div class="line number46 index45 alt1">
                                                                46</div>
                                                        <div class="line number47 index46 alt2">
                                                                47</div>
                                                        <div class="line number48 index47 alt1">
                                                                48</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash preprocessor bold">#!/bin/bash </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash comments">#useing parameter ip:netmask:gateway:dns1  </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash comments">#system version:centos6,7/redhat6,7 </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash comments">#read parameter </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">ipaddr=`</code><code class="bash functions">echo</code> <code class="bash plain">$1|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 1` </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">netmask=`</code><code class="bash functions">echo</code> <code class="bash plain">$1|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 2` </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">gateway=`</code><code class="bash functions">echo</code> <code class="bash plain">$1|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 3` </code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">dns1=`</code><code class="bash functions">echo</code> <code class="bash plain">$1|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 4` </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash plain">dns2=`</code><code class="bash functions">echo</code> <code class="bash plain">$1|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 5` </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash plain">targetDevice=$2 </code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash comments">#get device(active) name -- centos6 and centos7 </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="bash plain">DEVICE=`dmesg|</code><code class="bash functions">grep</code> <code class="bash plain">Link|</code><code class="bash functions">grep</code> <code class="bash plain">Up|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 3,4|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">" "</code> <code class="bash plain">-f 2|</code><code class="bash functions">cut</code> <code class="bash plain">-d </code><code class="bash string">":"</code> <code class="bash plain">-f 1|</code><code class="bash functions">uniq</code><code class="bash plain">|</code><code class="bash functions">head</code> <code class="bash plain">-n 1` </code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="bash comments">#if parameter has device name,use it ,else use first alive device </code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="bash keyword">if</code> <code class="bash plain">[ </code><code class="bash string">"$targetDevice"</code> <code class="bash plain">!= </code><code class="bash string">""</code> <code class="bash plain">]; </code><code class="bash keyword">then</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="bash spaces">  </code><code class="bash plain">DEVICE=$targetDevice </code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="bash spaces">  </code><code class="bash functions">echo</code> <code class="bash string">'device use target device :'</code> <code class="bash plain">$DEVICE </code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="bash keyword">fi</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="bash comments">#backup net_file </code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="bash functions">mv</code>  <code class="bash plain">/etc/sysconfig/network-scripts/</code><code class="bash string">'ifcfg-'</code><code class="bash plain">$DEVICE  </code><code class="bash plain">/etc/sysconfig/network-scripts/</code><code class="bash string">'ifcfg-'</code><code class="bash plain">$DEVICE</code><code class="bash string">'.bak'</code> <code class="bash plain">-f </code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="bash comments">#config(net_file) </code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="bash functions">cat</code> <code class="bash plain">&lt;&lt;end&gt;&gt; </code><code class="bash plain">/etc/sysconfig/network-scripts/</code><code class="bash string">'ifcfg-'</code><code class="bash plain">$DEVICE </code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="bash plain">DEVICE=$DEVICE </code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="bash plain">ONBOOT=</code><code class="bash functions">yes</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="bash plain">TYPE=Ethernet </code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="bash plain">BOOTPROTO=none </code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="bash plain">IPV6INIT=no </code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="bash plain">DEFROUTE=</code><code class="bash functions">yes</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="bash plain">IPADDR=$ipaddr </code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="bash plain">GATEWAY=$gateway </code>
</div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="bash plain">NETMASK=$netmask </code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="bash plain">DNS1=$dns1 </code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                        <code class="bash plain">DNS2=$dns2 </code>
</div>
                                                                <div class="line number38 index37 alt1">
                                                                        <code class="bash plain">end </code>
</div>
                                                                <div class="line number39 index38 alt2">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number40 index39 alt1">
                                                                        <code class="bash comments">#update /etc/hosts </code>
</div>
                                                                <div class="line number41 index40 alt2">
                                                                        <code class="bash functions">cat</code> <code class="bash plain">/sensor/bin/standardhosts</code><code class="bash plain">&gt;</code><code class="bash plain">/etc/hosts</code>
</div>
                                                                <div class="line number42 index41 alt1">
                                                                        <code class="bash functions">echo</code> <code class="bash string">'127.0.0.1 '</code><code class="bash plain">$(</code><code class="bash functions">hostname</code><code class="bash plain">)&gt;&gt;</code><code class="bash plain">/etc/hosts</code>
</div>
                                                                <div class="line number43 index42 alt2">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number44 index43 alt1">
                                                                        <code class="bash comments">#grant the net_file </code>
</div>
                                                                <div class="line number45 index44 alt2">
                                                                        <code class="bash functions">chmod</code> <code class="bash plain">755 </code><code class="bash plain">/etc/sysconfig/network-scripts/</code><code class="bash string">'ifcfg-'</code><code class="bash plain">$DEVICE </code>
</div>
                                                                <div class="line number46 index45 alt1">
                                                                        <code class="bash spaces"> </code>
</div>
                                                                <div class="line number47 index46 alt2">
                                                                        <code class="bash comments">#restart network </code>
</div>
                                                                <div class="line number48 index47 alt1">
                                                                        <code class="bash plain">/etc/init</code><code class="bash plain">.d</code><code class="bash plain">/network</code> <code class="bash plain">restart </code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <br>
             实际在这个shell脚本执行过程中,碰到几个问题,是目标服务器的网络服务相关的配置问题。有四种不同的错误,整理如下,以备后用。脚本的本质就是将目的IP信息写入到网卡文件ifcfg-eth2文件中。(eth2是测试机器上的通讯网卡名称),作为参数需要传递给脚本的。</p>
<p>
        <strong>问题一</strong></p>
<p>
             在虚拟机上测试,执行这个脚本过程中遇到的问题。本地安装的是VirtualBox,复制了5个虚拟机的节点。基于这个背景,那么在执行脚本完成后,重启网卡服务service network restart命令,总是遭遇失败,失败信息提示:</p>
<p>
        <span>         Error:No suitable device found: no device found for connection "System eth0"</span></p>
<p>
             这是因为虚拟机在复制过程中复制了网卡,但实际上ifconfig-a只显示一个网卡。解决办法:</p>
<p>
             第一步,执行ifconfig –a 查看当前系统的网卡名称,我的当前虚拟机节点是eth2,lo.</p>
<p>
             第二步,保留/etc/sysconfig/network-scripts中ifcfg-eth2,ifcfg-lo,其他不存在的网卡文件需要删除。复制过来的是eth0,rm –rf ifcfg-eth0文件。</p>
<p>
             第三步,ifcfg-eth2文件内容,保证DEVICE=eth2参数名称跟文件名称一致。</p>
<p>
             第四步,修改网卡策略文件vi /etc/udev/rules.d/70-persistent-net.rules找到eth2网卡的配置,修正MAC地址和eth2的MAC地址一致。 </p>
<p>
            第五步,验证:执行service network restart验证网卡重启成功。</p>
<p>
        <strong>问题二</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_452814">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">nm_object_array_demarshal: couldn't create object </code><code class="bash keyword">for</code> <code class="bash plain">/org/freedesktop/NetworkManager/ActiveConnection/39</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">Error: Obtaining active connection </code><code class="bash keyword">for</code><code class="bash string">'/org/freedesktop/NetworkManager/ActiveConnection/39'</code> <code class="bash plain">failed.</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash spaces">                             </code><code class="bash plain"></code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>问题三</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_617842">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">See ‘systemctlstatus network.service‘ and ‘journalctl-xn‘ </code><code class="bash keyword">for</code> <code class="bash plain">details</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        这个问题,执行journalctl–xe&gt; /home/journalctl.log</p>
<p>
        查看日志文件中,找到真正的错误是它:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_644819">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">Bringing up interface enp4s0f0: RTNETLINK answers: File exists</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong> 问题四</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_68887">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. </code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
         centos下出现该故障的二、三、四三种问题的根源一样,就是启动网络的两个服务有冲突:/etc/init.d/network和/etc/init.d/NetworkManager这两个服务有冲突。</p>
<p>
        <strong>    解决办法</strong>:关掉NetworkManager服务,通过命令service NetworkManager stop完成。再执行service network restart验证能够正常重启网卡服务。</p>
<p>
        <strong>结论</strong></p>
<p>
            验证IP设置脚本,提供两个参数一个是IP信息和网卡名称执行如下命令:</p>
<p>
          <span>   sh reset_ip.sh  192.168.10.170:255.255.255.0:192.168.10.1:10.0.1.90  eth2可以修改虚拟机IP地址。</span>一个简单的IP设置脚本,执行过程中几乎把网上跟网卡相关的问题,都遭遇了。各种尝试终于找到原因了,主要根源就是NetworkManage这个服务的问题。</p>
<p>
        感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
<p>
        原文链接:http://blog.csdn.net/wojiushiwo945you/article/details/72724583</p>
頁: [1]
查看完整版本: Linux下IP设置脚本的实例及遇到问题解决办法