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

本文共 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://oiima.baihongyu.com/

你可能感兴趣的文章
tmux guake
查看>>
ASP.NET 状态管理(Application)
查看>>
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
查看>>
使用HTTPCLIENT生成静态HTML页面
查看>>
C# 中的委托和事件==》observer
查看>>
VS2008 新建网站时没有模板解决办法
查看>>
网页HTML代码大全
查看>>
网站日志分析工具:WebLog Expert Lite
查看>>
一道sql测试题目
查看>>
CIOCP自定义帮助函数
查看>>
UVA 12517 Digit Sum(数学题)
查看>>
第44周星期日反思
查看>>
在PowerDesigner中设计物理模型1——表和主外键
查看>>
NYOJ58最少步数
查看>>
从数据库中查询数据
查看>>
2012年12月桌面日历壁纸免费下载——美女主题壁纸
查看>>
WPF Effect Clip以及Transform
查看>>
Change font size quickly
查看>>
.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
查看>>
python基于http协议编程:httplib,urllib和urllib2
查看>>