Linux下IP设置脚本的实例及遇到问题解决办法
Linux下IP设置脚本的实例及遇到问题解决办法
背景
一个Javaweb项目有一个功能是IP修改,Linux的IP修改脚本如下:
#!/bin/bash #useingparameterip:netmask:gateway:dns1 #systemversion:centos6,7/redhat6,7 #readparameter ipaddr=`echo$1|cut-d":"-f1` netmask=`echo$1|cut-d":"-f2` gateway=`echo$1|cut-d":"-f3` dns1=`echo$1|cut-d":"-f4` dns2=`echo$1|cut-d":"-f5` targetDevice=$2 #getdevice(active)name--centos6andcentos7 DEVICE=`dmesg|grepLink|grepUp|cut-d":"-f3,4|cut-d""-f2|cut-d":"-f1|uniq|head-n1` #ifparameterhasdevicename,useit,elseusefirstalivedevice if["$targetDevice"!=""];then DEVICE=$targetDevice echo'deviceusetargetdevice:'$DEVICE fi #backupnet_file mv/etc/sysconfig/network-scripts/'ifcfg-'$DEVICE/etc/sysconfig/network-scripts/'ifcfg-'$DEVICE'.bak'-f #config(net_file) cat<>/etc/sysconfig/network-scripts/'ifcfg-'$DEVICE DEVICE=$DEVICE ONBOOT=yes TYPE=Ethernet BOOTPROTO=none IPV6INIT=no DEFROUTE=yes IPADDR=$ipaddr GATEWAY=$gateway NETMASK=$netmask DNS1=$dns1 DNS2=$dns2 end #update/etc/hosts cat/sensor/bin/standardhosts>/etc/hosts echo'127.0.0.1'$(hostname)>>/etc/hosts #grantthenet_file chmod755/etc/sysconfig/network-scripts/'ifcfg-'$DEVICE #restartnetwork /etc/init.d/networkrestart
实际在这个shell脚本执行过程中,碰到几个问题,是目标服务器的网络服务相关的配置问题。有四种不同的错误,整理如下,以备后用。脚本的本质就是将目的IP信息写入到网卡文件ifcfg-eth2文件中。(eth2是测试机器上的通讯网卡名称),作为参数需要传递给脚本的。
问题一
在虚拟机上测试,执行这个脚本过程中遇到的问题。本地安装的是VirtualBox,复制了5个虚拟机的节点。基于这个背景,那么在执行脚本完成后,重启网卡服务servicenetworkrestart命令,总是遭遇失败,失败信息提示:
Error:Nosuitabledevicefound:nodevicefoundforconnection"Systemeth0"
这是因为虚拟机在复制过程中复制了网卡,但实际上ifconfig-a只显示一个网卡。解决办法:
第一步,执行ifconfig–a查看当前系统的网卡名称,我的当前虚拟机节点是eth2,lo.
第二步,保留/etc/sysconfig/network-scripts中ifcfg-eth2,ifcfg-lo,其他不存在的网卡文件需要删除。复制过来的是eth0,rm–rfifcfg-eth0文件。
第三步,ifcfg-eth2文件内容,保证DEVICE=eth2参数名称跟文件名称一致。
第四步,修改网卡策略文件vi/etc/udev/rules.d/70-persistent-net.rules找到eth2网卡的配置,修正MAC地址和eth2的MAC地址一致。
第五步,验证:执行servicenetworkrestart验证网卡重启成功。
问题二
nm_object_array_demarshal:couldn'tcreateobjectfor/org/freedesktop/NetworkManager/ActiveConnection/39 Error:Obtainingactiveconnectionfor'/org/freedesktop/NetworkManager/ActiveConnection/39'failed. [FAILED]
问题三
See‘systemctlstatusnetwork.service‘and‘journalctl-xn‘fordetails
这个问题,执行journalctl–xe>/home/journalctl.log
查看日志文件中,找到真正的错误是它:
Bringingupinterfaceenp4s0f0:RTNETLINKanswers:Fileexists
问题四
Bringingupinterfaceeth0:Deviceeth0doesnotseemtobepresent,delayinginitialization.
centos下出现该故障的二、三、四三种问题的根源一样,就是启动网络的两个服务有冲突:/etc/init.d/network和/etc/init.d/NetworkManager这两个服务有冲突。
解决办法:关掉NetworkManager服务,通过命令serviceNetworkManagerstop完成。再执行servicenetworkrestart验证能够正常重启网卡服务。
结论
验证IP设置脚本,提供两个参数一个是IP信息和网卡名称执行如下命令:
shreset_ip.sh 192.168.10.170:255.255.255.0:192.168.10.1:10.0.1.90 eth2可以修改虚拟机IP地址。一个简单的IP设置脚本,执行过程中几乎把网上跟网卡相关的问题,都遭遇了。各种尝试终于找到原因了,主要根源就是NetworkManage这个服务的问题。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!