通过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 不妨先定个小目标,精通Shell编程!如果精通了,则15K起,可联系老男孩给你推荐企业。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |