企业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启动脚本的编写
要求:用函数,case语句、if语句等实现。
解答:
[root@db02scripts]#cat/etc/init.d/oldgirl
#!/bin/bash
#chkconfig:23456436
#description:MySQLstartup
#Author:oldboy
#Blog:
#Time:2017-07-0709:24:34
#Name:mysqld.sh
#Version:V1.0
#Description:Thisisatestscript.
[-f/etc/init.d/functions]&&source/etc/init.d/functions
Port=3306
User="root"
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!$@"
}
log_failure_msg(){
echo"ERROR!$@"
}
case"$1"in
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
;;
stop)
iftest-s"$mysqld_pid_file_path"
then
mysqld_pid=`cat"$mysqld_pid_file_path"`
if(kill-0$mysqld_pid2>/dev/null)
then
echo"ShuttingdownMySQL"
kill$mysqld_pid
return_value=$?
sleep2
else
log_failure_msg"MySQLserverprocess#$mysqld_pidisnotrunning!"
rm-f"$mysqld_pid_file_path"
fi
#DeletelockforCentOS
iftest-f"$lock_file_path"
then
rm-f"$lock_file_path"
fi
exit$return_value
else
log_failure_msg"MySQLserverPIDfilecouldnotbefound!"
fi
;;
restart)
if$0stop;then
$0start
else
log_failure_msg"Failedtostoprunningserver,sorefusingtotrytostart."
exit1
fi
;;
*)
echo"Usage:$0{start|stop|restart}"
exit1
;;
esac
exit$return_value
函数版:
#!/bin/bash
#chkconfig:23456436
#description:MySQLstartup
#Author:oldboy
#Blog:
#Time:2017-07-0709:24:34
#Name:mysqld.sh#Version:V1.0#Description:Thisisatestscript.[-f/etc/init.d/functions]&&source/etc/init.d/functionsport=3306user="root"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"exportPATHreturn_value=0#Lockdirectory.lockdir='/var/lock/subsys'lock_file_path="$lockdir/mysql"log_success_msg(){echo"SUCCESS!$@"}log_failure_msg(){echo"ERROR!$@"}start(){#Startdaemonecho"StartingMySQL"iftest-x$bindir/mysqld_safethen$bindir/mysqld_safe--datadir="$datadir"--pid-file="$mysqld_pid_file_path">/dev/null&return_value=$?sleep2#MakelockforCentOSiftest-w"$lockdir"thentouch"$lock_file_path"fiexit$return_valueelselog_failure_msg"Couldn'tfindMySQLserver($bindir/mysqld_safe)"fi}stop(){iftest-s"$mysqld_pid_file_path"thenmysqld_pid=`cat"$mysqld_pid_file_path"`if(kill-0$mysqld_pid2>/dev/null)thenecho"ShuttingdownMySQL"kill$mysqld_pidreturn_value=$?sleep2elselog_failure_msg"MySQLserverprocess#$mysqld_pidisnotrunning!"rm-f"$mysqld_pid_file_path"fi#DeletelockforCentOSiftest-f"$lock_file_path"thenrm-f"$lock_file_path"fiexit$return_valueelselog_failure_msg"MySQLserverPIDfilecouldnotbefound!"fi}case"$1"instart)start;;stop)stop;;restart)if$0stop;then$0startelselog_failure_msg"Failedtostoprunningserver,sorefusingtotrytostart."exit1fi;;*)echo"Usage:$0{start|stop|restart}"exit1;;esacexit$return_value