通过Shell开发企业级专业服务启动脚本案例MySQL

老男孩教育Linux高端运维班Shell课后必会考试题:

企业Shell面试题10:开发企业级MysqL启动脚本

说明:

MysqL启动命令为:

/bin/shMysqLd_safe--pid-file=$MysqLd_pid_file_path2>&1>/dev/null&

停止命令逻辑脚本为:

MysqLd_pid=`cat"$MysqLd_pid_file_path"`
if(kill-0$MysqLd_pid2>/dev/null)
then
kill$MysqLd_pid
sleep2
fi

请完成MysqL启动脚本的编写,并实现可以使用chkconfig配置开机自启动。

要求:用函数,case语句、if语句等实现。


解答:此题的技巧适合绝大多数启动脚本,例如:rsync,Nginx等,仅以MysqL为例介绍思路。

简单、易用、高效、专业

#!/bin/bash
#chkconfig:23456436
#description:MysqLstartup
#Author:oldboy
#Blog:http://oldboy.blog.51cto.com
#Time:2017-07-0709:24:34
#Name:MysqLd
#Version:V1.0
#Description:Thisisatestscript.
[-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"#此步对开机启动及定时启动及其关键。
exportPATH
return_value=0


#Lockdirectory.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/MysqL"

log_success_msg(){
echo"SUCCESS!$@"#注意函数的缩进,下同,也是专业的表现,可放到functions里。
}
log_failure_msg(){
echo"ERROR!$@"
}

#StartFunc
start(){
#Startdaemon
echo"StartingMysqL"
iftest-x$bindir/MysqLd_safe#启动文件是否可执行。
then
$bindir/MysqLd_safe--datadir="$datadir"--pid-file="$MysqLd_pid_file_path">/dev/null&
return_value=$?#是否处理好返回值是区别脚本是否专业规范的关键。
sleep2

#MakelockforCentOS
iftest-w"$lockdir"#锁目录是否可写。
then
touch"$lock_file_path"#创建锁文件。
fi
exit$return_value
else
log_failure_msg"Couldn'tfindMysqLserver($bindir/MysqLd_safe)"
fi
}
#StopFunc
stop(){
iftest-s"$MysqLd_pid_file_path"#是否PID文件存在并大小大于0。
then
MysqLd_pid=`cat"$MysqLd_pid_file_path"`

if(kill-0$MysqLd_pid2>/dev/null)#检查PID对应的进程是否存在。
then
echo"ShuttingdownMysqL"
kill$MysqLd_pid#不能带-9,否则后果自负。
return_value=$?
sleep2
else
log_failure_msg"MysqLserverprocess#$MysqLd_pidisnotrunning!"
rm-f"$MysqLd_pid_file_path"
fi
#DeletelockforOldboy'sCentOS
iftest-f"$lock_file_path"
then
rm-f"$lock_file_path"
fi
exit$return_value
else
log_failure_msg"MysqLserverPIDfileCouldnotbefound!"
fi
}
case"$1"in
start)
start
;;
stop)
stop
;;
restart)
if$0stop;then
$0start
else
log_failure_msg"Failedtostoprunningserver,sorefusingtotrytostart."
exit1
fi
;;

*)
echo"Usage:$0{start|stop|restart}"
exit1
esac
exit$return_value#是否处理好返回值是区别脚本是否专业规范的关键。

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

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

wKiom1le9rrDj6u4AAFVi8WAzKU935.png


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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...