通过Shell开发企业级专业服务启动脚本案例(MySQL)
老男孩教育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)相关推荐
- mysql shell无法启动服务_[shell脚本] mysql服务启动脚本
服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 ...
- windows系统的服务启动脚本和服务停止脚本
服务启动脚本 @echo off #执行这条命令后关闭所有命令(包括本身这条命令的回显,没有@就不包含本身) chcp 65001 #65001为UTF-8的代码页,显示utf8编码的中文字符 %1 ...
- Windows和Linux服务启动脚本
Windows和Linux服务启动脚本 一后端 Windows启动脚本 方式一 //startUser.bat TITLE user java -jar -Xms128m -Xmx128m honli ...
- php-fpm 没有启动脚本,php-fpm服务启动脚本
在php-fpm还是打补丁的时候,php-fpm重启只需要执行php-fpm restart或者reload, 自从php5.3之后,php-fpm的启动和停止显得比较麻烦,特意改写了一份nginx的 ...
- Ubuntu服务启动脚本
1.服务启动脚本 #!/bin/sh# Licensed to the Apache Software Foundation (ASF) under one or more # contributor ...
- shell开发的主机登录管理脚本
适配windows terminal 背景 设计 实现 流程图 脚本帮助文档 录入主机 登录主机 上传下载文件 操作主机记录 列出主机信息 代码展示 一个shell 开发的小型跳板机,献丑了 笔者的w ...
- mysql服务启动失败 Starting MySQL. ERROR! The server quit without updating PID file
[问题描述] 使用 service mysqld start 启动mysql服务失败,提示 Starting MySQL. ERROR! The server quit without updatin ...
- shell编程----服务启动脚本的编写
目录标题 1. nginx的安装和使用 2. nginx服务开启和停止脚本 1. nginx的安装和使用 nginx的安装 tar zxf nginx-1.17.8.tar.gz cd nginx-1 ...
- bat 服务启动脚本
当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...
最新文章
- Sap Byd Soap使用 SSL 客户端证书
- html需要电脑什么配置,配置一台电脑需要什么 选择配置一台好的台式电脑
- C#去掉字符串中的汉字
- AAAI 2019 | 自动机器学习计算量大!这种多保真度优化技术是走向应用的关键
- 4028: [HEOI2015]公约数数列
- 公安计算机专业就业前景,公安视听技术专业毕业后干什么
- 机器学习 对回归的评估_在机器学习回归问题中应使用哪种评估指标?
- Spring MVC+layui(基于bootstrap)+t 新增功能(页面和数据传递)
- 面试问题背后的“猫腻”
- 微信朋友圈八月十大谣言:洗澡先洗头会晕倒在浴室
- 布比Code Review赏金计划正式启动 让区块链回归代码本身
- 数据挖掘:模型选择——K-means
- 深度学习框架如何优雅的做算子对齐任务?
- linux安装java、配置 jmeter
- Java使用冒泡排序对数据进行排序,带注释
- alexa+android+版本,amazon alexa app下载-Amazon Alexa 安卓版v1.0.205-PC6安卓网
- Ruby语言入门之Hello world
- php 月份英文缩写,php如何实现月份转换
- PHP实现jsapi微信支付
- Python爬虫进阶之爬取篮球赛数据
热门文章
- tunctl used bridge sub interface network used with multi-network env
- Python 2.7 学习笔记 内置语句、函数、标准库
- thirft支持双向通信
- java中获取时间的方式,持续更新
- 桌面笔记工具KeepNote
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
- Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
- ms-sql是mysql吗_mssql和mysql有哪些区别?
- excel2010设置列宽为像素_怎么改变Excel中列宽的像素
- java tree json_treePanel json java后台