您的位置:首页 > 运维架构 > Linux

Linux下IP设置脚本实践

2017-05-25 13:38 387 查看

背景

     一个java web项目有一个功能是IP修改,Linux的IP修改脚本如下:

#!/bin/bash

#useing parameter ip:netmask:gateway:dns1
#system version:centos6,7/redhat6,7

#read parameter
ipaddr=`echo $1|cut -d ":" -f 1`
netmask=`echo $1|cut -d ":" -f 2`
gateway=`echo $1|cut -d ":" -f 3`
dns1=`echo $1|cut -d ":" -f 4`
dns2=`echo $1|cut -d ":" -f 5`
targetDevice=$2

#get device(active) name -- centos6 and centos7
DEVICE=`dmesg|grep Link|grep Up|cut -d ":" -f 3,4|cut -d " " -f 2|cut -d ":" -f 1|uniq|head -n 1`
#if parameter has device name,use it ,else use first alive device
if [ "$targetDevice" != "" ]; then
DEVICE=$targetDevice
echo 'device use target device :' $DEVICE
fi

#backup net_file
mv /etc/sysconfig/network-scripts/'ifcfg-'$DEVICE /etc/sysconfig/network-scripts/'ifcfg-'$DEVICE'.bak' -f

#config(net_file)
cat <<end>> /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

#grant the net_file
chmod 755 /etc/sysconfig/network-scripts/'ifcfg-'$DEVICE

#restart network
/etc/init.d/network restart
     实际在这个shell脚本执行过程中,碰到几个问题,是目标服务器的网络服务相关的配置问题。有四种不同的错误,整理如下,以备后用。脚本的本质就是将目的IP信息写入到网卡文件ifcfg-eth2文件中。(eth2是测试机器上的通讯网卡名称),作为参数需要传递给脚本的。

问题一

     在虚拟机上测试,执行这个脚本过程中遇到的问题。本地安装的是VirtualBox,复制了5个虚拟机的节点。基于这个背景,那么在执行脚本完成后,重启网卡服务service
network restart命令,总是遭遇失败,失败信息提示:
         Error:No suitable device found: no device found for connection "System eth0"
     这是因为虚拟机在复制过程中复制了网卡,但实际上ifconfig-a只显示一个网卡。解决办法:
     第一步,执行ifconfig –a
查看当前系统的网卡名称,我的当前虚拟机节点是eth2,lo.
     第二步,保留/etc/sysconfig/network-scripts中ifcfg-eth2,ifcfg-lo,其他不存在的网卡文件需要删除。复制过来的是eth0,rm
–rf ifcfg-eth0文件。
     第三步,ifcfg-eth2文件内容,保证DEVICE=eth2参数名称跟文件名称一致。
     第四步,修改网卡策略文件vi
/etc/udev/rules.d/70-persistent-net.rules找到eth2网卡的配置,修正MAC地址和eth2的MAC地址一致。
     第五步,验证:执行service network restart验证网卡重启成功。

问题二

nm_object_array_demarshal: couldn't create object for /org/freedesktop/NetworkManager/ActiveConnection/39

Error: Obtaining active connection for'/org/freedesktop/NetworkManager/ActiveConnection/39' failed.

                                                          [FAILED]

问题三

 See
‘systemctlstatus network.service‘
and ‘journalctl-xn‘ for
details

这个问题,执行journalctl–xe>
/home/journalctl.log

查看日志文件中,找到真正的错误是它:

Bringing up interface enp4s0f0: 
RTNETLINK answers: File exists

 

问题四

 Bringing up interface eth0: 
Device eth0 does not seem to be present,delaying initialization. 

 centos下出现该故障的二、三、四三种问题的根源一样,就是启动网络的两个服务有冲突:/etc/init.d/network和/etc/init.d/NetworkManager这两个服务有冲突。
    解决办法:关掉NetworkManager服务,通过命令service NetworkManager
stop完成。再执行service network restart验证能够正常重启网卡服务。

结论

    验证IP设置脚本,提供两个参数一个是IP信息和网卡名称执行如下命令:
     sh reset_ip.sh
 192.168.10.170:255.255.255.0:192.168.10.1:10.0.1.90  eth2可以修改虚拟机IP地址。一个简单的IP设置脚本,执行过程中几乎把网上跟网卡相关的问题,都遭遇了。各种尝试终于找到原因了,主要根源就是NetworkManage这个服务的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux IP设置