背景:
近期购买的阿里云的centos7.4系统的ecs,写在/etc/rc.local里面的挂载规则在重启后经常不生效,遂追查一下原因。
资料:
度娘找了很多资料,大都是说mount命令没有写绝对路径,系统环境变量未完全初始化之类的,要先source 一下/etc/profile,或者将挂载命令写到脚本里去执行,但是我都感觉和我遇到的情况不相符,因为之前很多机器都是这样去写的,挂载也没什么问题,为什么新创建的机器就出问题了呢?
解决:
最后,无奈我又去读了rc.local里面的内容:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
# In constrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
翻译:
#这个文件是为了兼容性的问题而添加的。
#强烈建议创建自己的systemd服务或udev规则来在开机时运行脚本而不是使用这个文件。
#与以前的版本引导时的并行执行相比较,这个脚本将不会在其他所有的服务后执行。
#请记住,你必须执行“chmod +x /etc/rc.d/rc.local”来确保确保这个脚本在引导时执行。
不知道大家有没有恍然大悟,仿佛天灵盖开了一扇窗一样,我赶紧去确认了一下rc.local和rc.d/rc.local的权限,发现后者没有了执行权限,添加权限后,重启,挂载可正常生效。
总结:
rc.local执行确实是比较靠前,可能在系统启动初期就会去读这个配置,或许会因此导致某些服务没起,配置已经读完而无法生效的情况,这个在以后的实际运用中还要注意;而且也因为执行比较靠前,有系统环境变量不生效的情况也就很正常了,这个后面也要注意这一点。不过此次遇到的情况就是在centos7.4的版本里面,默认/etc/rc.d/rc.local文件的可执行权限是没有的,如果需要使用这个还是要自己手动去加一下权限。随着版本的变迁,我们也体会到了centos7已渐渐的将此项配置边缘化,可能最后会走上弃用的道路,所以还是尽量不适用这个吧。对于磁盘挂载,还是更推荐将规则写在fstab里面会比较好。