博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Shell开发企业级专业服务启动脚本案例(MySQL)
阅读量:5950 次
发布时间:2019-06-19

本文共 2852 字,大约阅读时间需要 9 分钟。

老男孩教育Linux高端运维班Shell课后必会考试题:

企业Shell面试题10:开发企业级MySQL启动脚本

说明:

MySQL启动命令为:

/bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null &

停止命令逻辑脚本为:

mysqld_pid=`cat "$mysqld_pid_file_path"`if (kill -0 $mysqld_pid 2>/dev/null)  then    kill $mysqld_pid    sleep 2fi

请完成MySQL启动脚本的编写,并实现可以使用chkconfig配置开机自启动。

要求:用函数,case语句、if语句等实现。

解答:此题的技巧适合绝大多数启动脚本,例如:rsync,nginx等,仅以MySQL为例介绍思路。

简单、易用、高效、专业

#!/bin/bash# chkconfig: 2345 64 36# description: MySQL startup# Author:oldboy# Blog:http://oldboy.blog.51cto.com# Time:2017-07-07 09:24:34# Name:mysqld# Version:V1.0# Description:This is a test script.[ -f /etc/init.d/functions ] && source /etc/init.d/functionsbindir="/application/mysql/bin"datadir="/application/mysql/data"mysqld_pid_file_path="/application/mysql/`hostname`.pid"PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin" #此步对开机启动及定时启动及其关键。export PATHreturn_value=0# Lock directory.lockdir='/var/lock/subsys'lock_file_path="$lockdir/mysql"log_success_msg(){     echo " SUCCESS! $@" # 注意函数的缩进,下同,也是专业的表现,可放到functions里。}   log_failure_msg(){         echo " ERROR! $@"}  # Start Funcstart(){    # Start daemon    echo "Starting MySQL"    if test -x $bindir/mysqld_safe  # 启动文件是否可执行。    then        $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path"  >/dev/null &        return_value=$? # 是否处理好返回值是区别脚本是否专业规范的关键。        sleep 2        # Make lock for CentOS        if test -w "$lockdir"   # 锁目录是否可写。        then            touch "$lock_file_path"  # 创建锁文件。        fi        exit $return_value    else        log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"    fi}# Stop Funcstop(){    if test -s "$mysqld_pid_file_path" # 是否PID文件存在并大小大于0。    then        mysqld_pid=`cat "$mysqld_pid_file_path"`        if (kill -0 $mysqld_pid 2>/dev/null) # 检查PID对应的进程是否存在。        then            echo "Shutting down MySQL"            kill $mysqld_pid  # 不能带-9,否则后果自负。            return_value=$?            sleep 2        else            log_failure_msg "MySQL server process #$mysqld_pid is not running!"            rm -f "$mysqld_pid_file_path"        fi        # Delete lock for Oldboy's CentOS        if test -f "$lock_file_path"        then            rm -f "$lock_file_path"        fi        exit $return_value    else        log_failure_msg "MySQL server PID file could not be found!"    fi}case "$1" in    start)                    start        ;;    stop)        stop        ;;    restart)        if $0 stop; then           $0 start        else           log_failure_msg "Failed to stop running server, so refusing to try to start."           exit 1        fi        ;;    *)        echo "Usage: $0  {start|stop|restart}"        exit 1esacexit $return_value #是否处理好返回值是区别脚本是否专业规范的关键。

更多Shell知识可参考老男孩的新书《跟老男孩学Linux运维:Shell编程实战》,各大书店有售

不妨先定个小目标,精通Shell编程!如果精通了,则15K起,可联系老男孩给你推荐企业。

有精力的朋友可以写下rsync或nginx启动脚本模仿下,可以评论在下面。

转载地址:http://tnixx.baihongyu.com/

你可能感兴趣的文章
get请求传递中文参数乱码解决方法
查看>>
苦战 自由软件的今生前世
查看>>
搭建 Discuz 论坛
查看>>
Go语言的国际化支持(资源文件翻译)
查看>>
install oracle 11g on linux (centos6) 遇到的问题
查看>>
PhoneGap插件开发流程
查看>>
iOS设计模式——桥接模式
查看>>
gitlab runner 优化
查看>>
快速添加百度网盘文件到Aria2 猴油脚本
查看>>
mac 无法登录mysql的解决办法
查看>>
Shiro权限判断异常之命名导致的subject.isPermitted 异常
查看>>
Hello world travels in cpp - 字符串(2)
查看>>
springMVC笔记系列(10)——CookieValue注解
查看>>
Spring框架笔记(六)——Spring IOC容器Bean之间的继承与依赖关系
查看>>
struts2自定义拦截器
查看>>
Eclipse安装adt插件后之后看不到andorid manger
查看>>
Kafka服务端脚本详解(1)一topics
查看>>
Zookeeper 集群安装配置,超详细,速度收藏!
查看>>
js中var self=this的解释
查看>>
js--字符串reverse
查看>>