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

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

背景

一个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这个服务的问题。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-07-03

Linux 配置静态IP的方法

在新安装的Linux系统命令行下, 敲入:ifconfig,显示如下界面. 上面这张图显示网卡没有启动,那么我们敲入代码:ifup eth0启动网卡. 网卡启动后,我们可以看出,IP地址和网关等其他信息都已经出现. 但是我们需要的是静态IP,即不随着时间改变而改变的IP地址. 首先我们要知道我们的网关地址是多少. 敲入代码:route ,下图中的192.168.164.2就是我们的默认网管地址,记住这个,下面的配置需要用这个. 继续敲入代码: vi /etc/sysconfig/network-

Centos Linux7设置静态IP的实例

Centos Linux7设置静态IP的实例 ## 先进入配置文件的放置位置: cd /etc/sysconfig/network-scripts/ ## 查看当前网卡使用的是哪个文件 ip add ## 过滤出配置文件列表 ll | grep ifcfg ## 编辑配置文件 vi ifcfg-ens160 ## 配置文件内容 主要:BOOTPROTO   IPADDR   NETMASK   NM_CONTROLLED  ONBOOT 这几个字段,其他的不变 TYPE=Ethernet BOO

linux vps服务器常用服务iptables策略

vps服务器裸奔在公网上,总感觉有点不安全,没办法总得整点措施来加固下服务器呀,安全第一.linux系统自带防火墙必须要好好利用起来,可是我有一年多没写过防火墙策略了,该忘的都忘了,不该忘的也都忘得差不多了,看笔记,找找感觉. 目前这台vps上开启的服务有ssh,ftp,pptpd,shadowsocks等. 防火墙策略是默认策略是DROP的. 防火墙策略配置: [root@vultr scripts]# cat iptables.sh #/bin/bash #date:2017-04-10 #

windows及linux环境下永久修改pip镜像源的方法

一.在windows环境下修改pip镜像源的方法(以python3.5为例) (1):在windows文件管理器中,输入 %APPDATA% (2):会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 (3):在新建的pip.ini文件中输入以下内容,搞定 [global] timeout = 6000 index-url = http://pypi.douban.com/simple trusted-host = pypi.douban.com

解决linux下zip文件解压乱码问题

原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时出现乱码问题,因为Linux下的默认编码是UTF8. 解决方案一 使用7z解压. 安装p7zip和convmv # fedora $ su -c 'yum install p7zip convmv' # ubuntu $ sudo apt-get install p7zip convmv 执行一下命令解压缩 # 使用7z解压缩 $ LANG=C 7

VMware 克隆多台Linux机器并配置IP的方法

1.查看并分配虚拟网络 我们首先要知道 VMware 三种网络模式的区别. ①.Bridged(桥接模式):就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰.在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致. ②.NAT(网络地址转换模式):主机网

虚拟机中Linux新手入门配置IP以及重启网络

刚刚接触虚拟机,或者刚在虚拟机中安装linux的朋友们,因为是在虚拟机中安装的系统,所以需要自己配置IP地址. 下面分几步来配置这个IP地址: 第一步:打开你的虚拟机,打开linux,并使用root账号登录. 如图,我是用的是CentOS7.2系统,点击登录进去后,进入敲指令的界面,输入vi /etc/sysconfig/network-scripts/ifcfg-eth0(后面的eth每台电脑不一样,可按tab键补全.) 按照上述指令进入配置IP的界面,如图所示 由于我是已经配好的了,所以会比

linux中设置固定ip的方法(亲测有效)

首先打开虚拟机 打开xshell5连接虚拟机(比较方便,这里默认设置过Linux的ip,只是不固定) 输入ifconfig,可以查看网管相关配置信息: 然后输入    vi /etc/sysconfig/network-scripts/ifcfg-ens33命令.修改网卡配置文件 按 i 键进行编辑.修改入下,原有的配置不要删,只要按下面修改就好.没有的配置项新增上去就好 打开以后可以看到默认的配置就是dhcp,然后onboot=no,表示不会随着系统的启动而启动.我们需要修改这个配置 然后在下

VMware 虚拟机下安装 Linux(CentOS) 详细配置步骤

下载 CentOS7 我下载的镜像是 CentOS-7-x86_64-DVD-1908.iso ,你也可以自由选择,下面是下载链接. CentOS官网: http://isoredirect.centos.org/centos/7.4.1708/isos/x86_64/ 阿里云站点: http://mirrors.aliyun.com/centos/7/isos/x86_64/ 推荐前往阿里云站点下载,官网下载可能会很慢,甚至网页打不开. VMware配置 这里假设你已经安装了虚拟机,如未安装的

linux查看硬件配置命令的方法示例

硬件查看命令 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # cat /proc/version # 查看操作系统详情信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 资源 # free -

Linux SSH 安全策略 限制 IP 登录方法

方法一: 首先需要限制登录的ip(或者如果需要自己本地登录,查看最后登录ip即可) Vim /etc/hosts.allow 输入 sshd:114.80.100.159:allow vim /etc/hosts.deny 输入(表示除了上面允许的,其他的ip   都拒绝登陆ssh)    sshd:ALL 最后sshd重启 service sshd restart 方法二: 比如说你只允许114.80.100.159这个IP进入,其它都禁止: vim   /etc/ssh/sshd_confi

centos7修改网关和配置ip的方法示例

centos7版本在当时安装的时候选择可连接外网,就直接可以访问外网的,只需要设置静态Ip就可以了. 修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eno16777728 设置固态ip和网关,自己添加就好了,但是网关换个地方就得重新设置,可以添加多个,修改完成之后 :wq保存退出 重启网络 打开虚拟机的网络是可以打开的,win与虚拟机互相也可以ping通,设置成功 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

在VMware下快速克隆多个Linux环境的方法教程

为什么要克隆多个 Linux 系统? 因为要玩阿.其实也不是了,就是为了折腾嘛,玩个数据库主从啦.缓存集群啦.分布式消息集群啦.分布式各类服务啦,你要模拟几乎接近真实的环境,就必须要有多台机器,你想要有多台机器只有两种方式:买买买和装虚拟机. 你现在要模拟三台机器下实现分布式服务,你要怎么装环境? 当你在 VMware 里装好了一个 Linux 系统后,当然你可以选择再装下一个和下下一个,这没啥问题!不过,你就需要在每台机器上安装各种软件,如:JDK.Tomcat.Nginx啦.我这有一个极其方

手把手教你配置一台Linux虚拟机

手把手教你配置一台Linux虚拟机 前言: Linux distribution 越来越多,也越来越成熟,所以安装起来也是比较简单,但是要理解安装的每一个步骤还是需要对Linux的基础知识有一定的了解,不过不用很深入,如果很深入我也不会.这里我选择的安装方式都是最简单的,在磁盘分区最重要的步骤也是以最简单的方式分区. 本次Linux配置的目的不是作为商业用途,而是在于新手熟悉Linux的操作系统,使新手能自己在本地配置Linux系统. 选择distrubution版本,因为我们是把Linux作为

vmware克隆Centos6.4虚拟机网卡无法启动问题的解决方法

问题现象: 通过vmware8的完全克隆功能快速创建一台版本为CentOS 6.4的linux虚拟机. 创建后症状:启动之后使用ifconfig,发现无ip地址,只有回环地址为127.0.0.1 MAC地址以及主机名都和源主机相同(源主机采用手动方式配置的IP). 无论如何执行下面命令都无济于事: /etc/init.d/network restart ifup eth0  解决办法: 1.编辑eth0的配置文件:vi /etc/sysconfig/network-scripts/ifcfg-e