本文共 2014 字,大约阅读时间需要 6 分钟。
这里我们重点介绍/etc/rc.d/下的rcN.d目录(N是0~6的数字,其他请参考 文档资料) ,
root@rac3:/etc/rc.d# >ls init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinitrc.sysinit根据inittab中的配置顺序来执行rcN.d目录下的脚本,(注意rcN.d中放置的是init.d中脚本的软链接)其命名格式是: S{number}{name} K{number}{name} S开始的文件向脚本传递start参数 K开始的文件向脚本传递stop参数 以K开头的脚本运行在以S开头的脚本之前,number决定相同字母开头的脚本执行的顺序,S18mysqlatuo 执行顺序在S19mysqlatuo之前。 假设缺省的运行模式是3,系统就会按上述方式调用/etc/rc.d/rc3.d/下的脚本。 所以用户可以在这个文件中添加一些需要在系统完成初始化工作之后,用户登录之前执行的命令或者启动的服务 比如 MySQL。 三 实践 根据上述介绍的规则,在rc3.d下面配置MySQL自动启动的脚本。 本文一开始强调处理单机多实例的开启自动重启,在编写脚本时注意针对多个实例的处理,考虑到生产环节下 ,数据库实例可能发生迁移/下线等操作,在脚本中将端口写死 的方式是不推荐的。
chmod +x mysqldauto mv mysqldauto /etc/rc.d/init.d/处理启动命令ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc3.d/S99mysqld处理关闭命令ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc0.d/K20mysqldmysqlauto 脚本的内容如下: #!/bin/bash #获取 数据目录下的所有端口 mysql_ports #author :yangyi #date : 2016-02-15 MYSQL_ADMIN=`which mysqladmin` MYSQLD_SAFE=`which mysqld_safe` MYSQL_PORTS=`ls /srv/ | grep -e "my[0-9][0-9]*" | sed 's#my# #g' | tr -d '\n' | sed 's#^ ##g'` mysql_start() { ports_list=$1 for port in $ports_list; do SOCKET_FILE=/srv/my${port}/run/mysql.sock if [[ ! -f "$SOCKET_FILE" ]]; then $MYSQLD_SAFE --defaults-file=/srv/my${port}/my.cnf --read_only=1 & sleep 2; fi done } mysql_stop() { ports_list=$1 for port in $ports_list; do SOCKET_FILE=/srv/my${port}/run/mysql.sock if [[ -e $SOCKET_FILE ]]; then $MYSQL_ADMIN -uroot -S $SOCKET_FILE shutdown sleep 2; fi done } case "$1" in start) mysql_start $MYSQL_PORTS ;; stop) mysql_stop $MYSQL_PORTS ;; *) echo "Usage: $0 {start|stop|help} " esac
转载地址:http://avdfx.baihongyu.com/