MySQL专业服务_通过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)

then

kill $mysqld_pid

sleep 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 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 Func

stop(){

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 1

esac

exit $return_value #是否处理好返回值是区别脚本是否专业规范的关键。

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

ff38c0f7fa7193d3698166dd03d794d6.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值