通过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

wKiom1le9rrDj6u4AAFVi8WAzKU935.png


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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element vue 上传模板_vue+element 文件上传

一、前言element ui 已经提供了文件上传的组件,直接拿来就能用。具有以下几个特点:限制文件上传的个数,多个文件会发起多个请求。可以设置文件选择后自动上传或者手动触发上传,并且手动触发可以自定义上传逻辑。可以限制文件格式和…

React Native之js调用Android原生使用Callback传递结果给js

如果不清楚js如何调用Android原生,可以先参考我的这篇博客React Native实现js调用安卓原生代码 1 问题 上面的文章只是调用安卓原生显示Toast,但是我们一般会需要调用安卓的代码然后去拿回结果给js,但是我们知道在android层js调用的这个函数返回值必须的void,所以我们需要用到…

ENVI帮助研究人员发现金矿

本文转自:http://www.esrichina-bj.cn/2012/0319/1663.html 遥感影像能让我们实时的获取地理区域的准确信息,这些为很多石油、天然气和矿产的开采提供关键的信息,节约实地测量的成本,提高工作效率。 美国圣路易斯大学的研究人员希…

ajax速度axio速度,[转]Ajax Fetch Axios之间的详细区别以及优缺点

jQuery ajax12345678$.ajax({type: POST,url: url,data: data,dataType: dataType,success: function (){},error: function (){}})优缺点:本身是针对mvc模式的编程,不符合现在mvvm的浪潮基于原生的XHR开发,XHR本身的架构不清晰,已…

C# 使用TCP创建HTTP客户程序

首先,创建一个控制台应用程序(包),向 Web 服务器发送一个 HTTP 请求。以前用 HttpClient 类实现了这个功能,但使用 TcpClient 类需要深入 HTTP 协议。HttpClientUsingTcp 示例代码使用了以下名称空间:System System.IO System.Net.Sockets …

Git之submodule使用总结

Git Submodule 可许可一个git仓库&#xff0c;作为另一个git仓库的子目录&#xff0c;保持父项目和子项目相互独立 1 添加仓库 git submodule add <仓库地址> <本地路径> 在父仓库根目录增加了.gitmodule文件 // 添加submodule字段 [submodule "submodule1&…

通读AFN①--从创建manager到数据解析完毕

流程梳理 今天开始会写几篇关于AFN源码解读的一些Blog&#xff0c;首先要梳理一下AFN的整体结构(主要是讨论2.x版本的Session访问模块)&#xff1a; 我们先看看我们最常用的一段代码&#xff1a; AFHTTPSessionManager *manager [AFHTTPSessionManager manager]; [manager GET…

学前教育试题库及答案_最新《学前教育学》专科-试题库及答案资料

精品文档精品文档学前教育学专科题库及答案一、单项选择题&#xff1a;(从下列各题备选答案中选出最适合的一个答案。共120题&#xff0c;每题1分)1——5DACBB 6——10DACDB 11——15ABDAC 16——20 BCDDC 21——25BBBCC26——30DCCAD 31——35DBBAB 36——40ACA…

python画4维图_用Python 画个六维图,涨姿势了

关注后你就是我的人了 我们的大脑通常最多能感知三维空间&#xff0c;超过三维就很难想象了。尽管是三维&#xff0c;理解起来也很费劲&#xff0c;所以大多数情况下都使用二维平面。来自维基百科 不过&#xff0c;我们仍然可以绘制出多维空间&#xff0c;今天就来用 Python 的…

[Windows]_[0基础]_[Release程序的崩溃报告minidump解决方式]

场景:1. Release的程序崩溃时&#xff0c;崩溃报告能够让开发者查明代码哪里出了问题&#xff0c;用处大大的。2. 仅仅实用VS的编译器才支持&#xff0c;所以MinGW就无缘了。3. 使用了未处理异常过滤处理函数.4. 生成的.dmp文件用zlib库压缩, 用到下面的ZipHelper类&#xff0c…

高考地理背熟这些知识可以拿80%的分数(1)

一、地理特征的描述 (一).区域自然地理特征的描述: 1、分析区域自然地理特征: 从地形、气候、水文、植被、河流、土壤、自然资源、自然灾害、自然(生态)环境等几方面入手。

CF Theatre Square

Theatre Square time limit per test2 secondsmemory limit per test64 megabytesinputstandard inputoutputstandard outputTheatre Square in the capital city of Berland has a rectangular shape with the size n  m meters. On the occasion of the citys anniversary,…

迅捷路由器 服务器无响应,如果路由器重启还是上不了网 几招搞定

如果网速很慢重启了路由器之后结果还是慢&#xff0c;而且甚至上不了网了那该怎么办。如果有这种情况原因其实有很多很多的可能&#xff0c;需要逐个排查&#xff0c;首先需要进入192.168.1.1路由器的管理设置界面&#xff0c;查看路由器的运行状态。路由器设置、路由器没有成功…

Azure DevOps 中 Dapr项目自动部署流程实践

注&#xff1a;本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程&#xff0c;只是k8s的yaml配置文件有所不同流程选择基于 Dapr 的项目持续集成包含以下流程编译并打包项目构建 Dockerfile,并推送镜像push image至…

matlab求kcf算法响应图_Kernelized Correlation Filters(KCF)算法

目前在online visual tracking这个领域&#xff0c;已经涌现出很多的跟踪算法&#xff0c;比较知名如TLD&#xff0c;Struck&#xff0c;OAB&#xff0c;CT等等。但是能做到非常快速而且效果还不错的相对就较少了&#xff0c;好多算法都是刚刚能实时&#xff0c;而且还是在图像…

React Native之js同步调用安卓原生方法@ReactMethod(isBlockingSynchronousMethod = true)

1 问题 之前的代码js调用安卓原生都是用的异步方法,比如callback, promiss,异步的话,我们一般是在安卓原生有耗时操作,才用异步,如果我要离开返回,就需要js调用安卓同步方法 利用callback实现js调用原生可以参考我的这篇博客 React Native实现js调用安卓原生代码 React Nat…

用POP动画引擎实现弹簧动画(POPSpringAnimation)

效果图: #import "ViewController.h" #import <POP.h>interface ViewController ()property (nonatomic, weak) UIView *testView;endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor [UIColor blackColor…

地理知识归纳:影响降水的九大因素

降水指大气中水汽凝结降落的过程,包括降雨、下雪、冰雹等形式,降水的多少要受很多因素的影响,但主要条件是三个:充足的水汽供应,气流上升达到过饱和状态,足够的凝结核。通常情况下,我们不需要考虑凝结核的问题,只是考虑有没有充足的水汽和促使气流上升的机制就可以,归…

linux 查看cpu_作为高级Java,你应该了解的Linux知识

作为一个javaer&#xff0c;我以前写过很多关于Linux的文章。但经过多年的观察&#xff0c;发现其实对于大部分人&#xff0c;有些东西压根就用不着。用的最多的&#xff0c;就是到线上排查个问题而已&#xff0c;这让人很是苦恼。那么&#xff0c;我们就将范围再缩小一下。最有…

uva-10305-水题-拓扑排序

uva-10305-水题-拓扑排序 输入n,m,n代表点数,m代表边数(i,j),排序时i在j前面,没出现的点随意排 #include <iostream> #include<stdio.h> #include<math.h> #include<memory.h> using namespace std;const int maxNum 120; int a, b; int map[maxNum][…