EC2 - 想要在服务启动前安装

EC2 - 想要在服务启动前安装

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

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

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

因此我添加了mount /dev/xvdf /data我的/etc/rc.d/rc.local,然后重新启动了我的系统。

但显然chkconfig服务在之前启动/etc/rc.d/rc.local,因此 MySQL 和 Redis 启动失败。

chkconfig我想知道在哪里可以编写在服务启动之前调用的初始化脚本。

提前致谢。

答案1

您可能已经注意到,rc.local 通常是引导过程中执行的最后一个脚本。脚本中的注释说明了这一点。

从您问题中提到的内容来看,chkconfig我猜您运行的是 CentOS、Amazon 的基于 RHEL 的 Linux 或其他 Red Hat(或 Fedora)衍生产品。如果是这样,那么您可以忽略 Cindy@AWS 在该帖子中所说的内容。

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

    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 的设备。此外,它还会忽略 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 中挂载基于网络的文件系统,并且所有选项中带有 _netdev 的文件系统都由它处理。

Ubuntu 中缺少设备的问题,您需要添加nobootwait(另请参阅此问题nobootwait 和 nofail在 Unix.SE 上,安装是由 mountall(1) 执行的,以指定如果设备丢失,OS 启动过程不应失败。

答案2

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

编写一个 init.d 脚本来挂载/卸载,并让它在启动时在 MySQL 和 Redis 之前执行,在关闭时在 MySQL 和 Redis 之后执行。

相关内容