我正在使用 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 之后执行。