加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:45:18 所属栏目:安全 来源:网络整理
导读:老男孩教育Linux高端运维班Shell课后必会考试题: 企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: /bin/shmysqld_safe--pid-file=$mysqld_pid_file_path21/dev/null 停止命令逻辑脚本为: mysqld_pid=`cat"$mysqld_pid_file_path"`if(k

老男孩教育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起,可联系老男孩给你推荐企业。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读