EC2 – 要在服务启动之前安装

我正在使用AWS EC2,并添加了额外的EBS卷。 它目前被安装成一个新的设备。

MySQL和Redis DB将其数据存储在新的EBS卷上,并在chkconfig中注册。 因此,在chkconfig服务启动之前,我需要装入卷。

但是我不想将它添加到我的/etc/fstab ,正如下面的论坛中所述。 https://forums.aws.amazon.com/message.jspa?messageID=304528#304528

所以我在/etc/rc.d/rc.localjoin了mount /dev/xvdf /data ,然后重新启动了我的系统。

但显然chkconfig服务启动BEFORE /etc/rc.d/rc.local ,所以MySQL和Redis启动失败。

我想知道在哪里可以编写一个名为BEFORE chkconfig service starts的初始化脚本。

提前致谢。

正如您可能已经注意到的,rc.local通常是在启动过程中执行的最后一个脚本。 这在脚本的评论中有说明。

从你提到的chkconfig的问题来看,我猜你正在运行CentOS,基于RHEL的Linux或其他Red Hat(或Fedora)衍生产品。 如果是这样的话,那么你可以简单地忽略Cindy @ AWS在该主题中所说的话。

在RHEL中挂载本地文件系统是由/etc/rc.sysinit脚本完成的,该脚本挂载了所有非NFS,CIFS(SMB)或其他基于networking的文件系统的文件系统。 这是通过在脚本中执行以下行来完成的:

  action $"Mounting local filesystems: " mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev 

该行执行mount命令,指示它尝试挂载所有与nfs,nfs4,smbfs,ncpfs,cifs,gfs或gfs2不匹配的设备作为其文件系统types。 除此之外,它在fstab的选项中忽略所有使用_netdev的设备。

当mount尝试挂载任何不存在的文件系统时,它不会阻塞,但会失败并显示以下错误消息:

 # mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev` mount: special device /dev/fhsd does not exist 

在我的情况下,/ dev / fhsd是fstab中的一行,如下所示:

/ dev / fhsd / mnt ext4默认值0 0

正如你所看到的,这个故障不会阻塞安装过程,操作系统不会阻塞等待设备,它只会失败。

还有一个脚本负责在/etc/init.d/netfs中安装基于networking的文件系统,而且在其选项中有_netdev的所有文件系统都由它来处理。

在Ubuntu中缺less设备存在问题,您需要添加nobootwait (在nobootwait也可以看到关于nobootwait和nofail的这个问题),指定如果设备丢失,操作系统启动过程不应该失败,但是在Ubuntu下安装由mountall(1)执行。

你可以通过脚本中的注释告诉chkconfig执行init.d脚本的顺序。

编写一个init.d脚本来挂载/卸载,在启动MySQL和Redis之前以及closuresMySQL和Redis之后执行。