Enterprise Shell face question 10: Developing an enterprise MySQL startup script
Description
The MySQL startup command is:
1 |
/bin/sh mysqld_safe --pid- file =$mysqld_pid_file_path 2>&1 > /dev/null & |
The Stop command logic script is:
123456 |
< Code class= "Bash Plain" >mysqld_pid= ' cat "$mysqld _pid_file_path" if ( kill -0 $mysqld _pid 2> /dev/null &NBSP;&NBSP; then &NBSP;&NBSP;&NBSP;&NBSP; kill $mysqld _pid &NBSP;&NBSP;&NBSP;&NBSP; sleep 2 fi |
Please complete the MySQL startup script and implement the Chkconfig configuration to boot from.
Requirements: Implemented with functions, case statements, if statements, and so on.
Answer: The technique of this problem is suitable for most startup scripts, for example: Rsync,nginx and so on, only take MySQL as an example to introduce ideas.
Simple, easy-to-use, efficient, professional
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 66676869707172737475767778798081828384858687888990919293949596 |
#!/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! [email protected]"
# 注意函数的缩进,下同,也是专业的表现,可放到functions里。
}
log_failure_msg(){
echo
" ERROR! [email protected]"
}
# 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
#是否处理好返回值是区别脚本是否专业规范的关键。
|
Retained original source: http://oldboy.blog.51cto.com/2561410/1945183
Thanks to the author for sharing,
Linux shell attempts to write enterprise-level startup scripts