老男孩教育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)thenkill $mysqld_pidsleep 2
fi

请完成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/functions
bindir="/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 PATH
return_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 Func
start(){# Start daemonecho "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 CentOSif test -w "$lockdir"   # 锁目录是否可写。thentouch "$lock_file_path"  # 创建锁文件。fiexit $return_valueelselog_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"fi
}
# Stop Func
stop(){if test -s "$mysqld_pid_file_path" # 是否PID文件存在并大小大于0。thenmysqld_pid=`cat "$mysqld_pid_file_path"`if (kill -0 $mysqld_pid 2>/dev/null) # 检查PID对应的进程是否存在。thenecho "Shutting down MySQL"kill $mysqld_pid  # 不能带-9,否则后果自负。return_value=$?sleep 2elselog_failure_msg "MySQL server process #$mysqld_pid is not running!"rm -f "$mysqld_pid_file_path"fi# Delete lock for Oldboy's CentOSif test -f "$lock_file_path"thenrm -f "$lock_file_path"fiexit $return_valueelselog_failure_msg "MySQL server PID file could not be found!"fi
}
case "$1" instart)            start;;stop)stop;;restart)if $0 stop; then$0 startelselog_failure_msg "Failed to stop running server, so refusing to try to start."exit 1fi;;*)echo "Usage: $0  {start|stop|restart}"exit 1
esac
exit $return_value #是否处理好返回值是区别脚本是否专业规范的关键。

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

https://item.jd.com/12117874.html

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

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

转载于:https://blog.51cto.com/oldboy/1945183

通过Shell开发企业级专业服务启动脚本案例(MySQL)相关推荐

  1. mysql shell无法启动服务_[shell脚本] mysql服务启动脚本

    服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 ...

  2. windows系统的服务启动脚本和服务停止脚本

    服务启动脚本 @echo off #执行这条命令后关闭所有命令(包括本身这条命令的回显,没有@就不包含本身) chcp 65001 #65001为UTF-8的代码页,显示utf8编码的中文字符 %1 ...

  3. Windows和Linux服务启动脚本

    Windows和Linux服务启动脚本 一后端 Windows启动脚本 方式一 //startUser.bat TITLE user java -jar -Xms128m -Xmx128m honli ...

  4. php-fpm 没有启动脚本,php-fpm服务启动脚本

    在php-fpm还是打补丁的时候,php-fpm重启只需要执行php-fpm restart或者reload, 自从php5.3之后,php-fpm的启动和停止显得比较麻烦,特意改写了一份nginx的 ...

  5. Ubuntu服务启动脚本

    1.服务启动脚本 #!/bin/sh# Licensed to the Apache Software Foundation (ASF) under one or more # contributor ...

  6. shell开发的主机登录管理脚本

    适配windows terminal 背景 设计 实现 流程图 脚本帮助文档 录入主机 登录主机 上传下载文件 操作主机记录 列出主机信息 代码展示 一个shell 开发的小型跳板机,献丑了 笔者的w ...

  7. mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file

    [问题描述] 使用 service mysqld start 启动mysql服务失败,提示 Starting MySQL. ERROR! The server quit without updatin ...

  8. shell编程----服务启动脚本的编写

    目录标题 1. nginx的安装和使用 2. nginx服务开启和停止脚本 1. nginx的安装和使用 nginx的安装 tar zxf nginx-1.17.8.tar.gz cd nginx-1 ...

  9. bat 服务启动脚本

    当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...

最新文章

  1. Sap Byd Soap使用 SSL 客户端证书
  2. html需要电脑什么配置,配置一台电脑需要什么 选择配置一台好的台式电脑
  3. C#去掉字符串中的汉字
  4. AAAI 2019 | 自动机器学习计算量大!这种多保真度优化技术是走向应用的关键
  5. 4028: [HEOI2015]公约数数列
  6. 公安计算机专业就业前景,公安视听技术专业毕业后干什么
  7. 机器学习 对回归的评估_在机器学习回归问题中应使用哪种评估指标?
  8. Spring MVC+layui(基于bootstrap)+t 新增功能(页面和数据传递)
  9. 面试问题背后的“猫腻”
  10. 微信朋友圈八月十大谣言:洗澡先洗头会晕倒在浴室
  11. 布比Code Review赏金计划正式启动 让区块链回归代码本身
  12. 数据挖掘:模型选择——K-means
  13. 深度学习框架如何优雅的做算子对齐任务?
  14. linux安装java、配置 jmeter
  15. Java使用冒泡排序对数据进行排序,带注释
  16. alexa+android+版本,amazon alexa app下载-Amazon Alexa 安卓版v1.0.205-PC6安卓网
  17. Ruby语言入门之Hello world
  18. php 月份英文缩写,php如何实现月份转换
  19. PHP实现jsapi微信支付
  20. Python爬虫进阶之爬取篮球赛数据

热门文章

  1. tunctl used bridge sub interface network used with multi-network env
  2. Python 2.7 学习笔记 内置语句、函数、标准库
  3. thirft支持双向通信
  4. java中获取时间的方式,持续更新
  5. 桌面笔记工具KeepNote
  6. Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
  7. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
  8. ms-sql是mysql吗_mssql和mysql有哪些区别?
  9. excel2010设置列宽为像素_怎么改变Excel中列宽的像素
  10. java tree json_treePanel json java后台