34

Linux 启动网络后执行脚本 | 君莫笑的博客

 4 years ago
source link: https://berlinsaint.github.io/blog/2019/07/07/Linux%E5%9C%A8%E7%BD%91%E7%BB%9C%E5%8A%9F%E8%83%BD%E5%B7%A5%E4%BD%9C%E5%90%8E%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC/?u=
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Linux 启动网络后执行脚本

最近又遇到rc.local 不能正常执行一些开机初始化脚本, 本以为rc.local只要拥有x权限基本没有执行一些命令没有问题, 但是最近设计到mount远程主机的时候还是有很大几率执行不成功,经分析大概率是因为 rc.local执行的时机可能在network服务启动之前,故简单调研了下linux在 网络服务启动成功后的一些钩子脚本的配置

鉴于现在主流linux主要是两种配置网络方式,一种是 配置networ-manager,一种则是原生的linux network配置,可以自行看下自己linux是否安装了network-manager服务即可判断,主要配置网络方式,基本上下面是非1即2

非Network-Manager管理网络方式)

对于Centos部分版本(下文测试版本”CentOS Linux 7 (Core)”) 我们在network-scripts /etc/sysconfig/network-scripts/ifup-post 文件夹下可以看到有个 ifup-post脚本;简单分析该脚本,

在脚本的末尾:

1
2
3
4
5
6
# Notify programs that have requested notification
do_netreport

if [ -x /sbin/ifup-local ]; then
/sbin/ifup-local ${DEVICE}
fi

可以清楚看到,ifup (接口启动后(post)执行 /sbin/ifup-local) ,并且传了参数 $DEVICE给脚本,告知是哪个 接口设备启动ok了;

好了,所以我们看看有没有该文件,没有则创建一个;

vim /sbin/ifup-local

  • 写入一下内容
1
2
3
4
if [[ "$1" == "eth0" ]]
then
mount -t nfs -o nolock 123.123.110.110:/mnt/xxxx/es /remote_bak
fi
  • 保存文件后, 执行 chmod +x /sbin/ifup-local 确保有执行权限

至此, 我们可以重启服务测试,可以保证 100% mount成功(排除其他网络因素)

使用Network-Manager管理都可以按此方式配置)

对于 Ubuntu, 和centos7有些许差别(有些发行版centos也使用这种方式,可以归纳为如果使用 network-manager管理网络),但是基本一致,不同的是

  • Ubuntu 将网络启动后执行的脚本存放于 if-up.d (/etc/network/if-up.d/)目录中, 并在interfaces配置文件中指定调用该脚本(默认读取 /etc/network/if-up.d/目录中的脚本)

  • 首先编辑启动脚本如: mount-nfs,( 需要注意最好不要以.sh结尾)
    vim /etc/network/if-up.d/mount-nfs

1
2
#!/bin/bash
mount -t nfs -o nolock 123.123.110.110:/mnt/xxxx/es /remote_bak

保存后, 赋予执行权限 chmod 755 /etc/network/if-up.d/mount-nfs

  • 在interfaces文件总对应接口调用该脚本
1
2
3
4
5
6
7
8
9
auto lo
iface lo inet loopback
auto ens3
iface ens3 inet static
up mount-nfs
address 172.31.10.8
netmask 255.255.255.0
gateway 172.31.10.1
dns-nameserver 172.31.10.44

重启服务 验证网络启动后 mount可以成功执行


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK