280 lines
6.1 KiB
Plaintext
280 lines
6.1 KiB
Plaintext
#!/bin/bash
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: <%= @mysql_name %>
|
|
# Required-Start: $remote_fs $syslog
|
|
# Required-Stop: $remote_fs $syslog
|
|
# Should-Start: $network $time
|
|
# Should-Stop: $network $time
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Start and stop the mysql database server daemon
|
|
# Description: Controls the main MySQL database server daemon "mysqld"
|
|
# and its wrapper script "mysqld_safe".
|
|
### END INIT INFO
|
|
|
|
# set -e
|
|
# set -u
|
|
|
|
### Exit code reference
|
|
# http://fedoraproject.org/wiki/Packaging:SysVInitScript
|
|
# http://refspecs.linuxbase.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html
|
|
|
|
# Source functions
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
# Source RHEL function library.
|
|
. /etc/rc.d/init.d/functions
|
|
<% end %>
|
|
|
|
####
|
|
# Variables
|
|
####
|
|
|
|
STARTTIMEOUT=900
|
|
STOPTIMEOUT=900
|
|
PID_DELAY=60
|
|
|
|
####
|
|
# Helper functions
|
|
###
|
|
|
|
# Boolean function to see if MYSQL_PID exists and is a number
|
|
pid_exists() {
|
|
PID_EXISTS=1
|
|
if [ -f <%= @pid_file %> ]; then
|
|
MYSQLD_PID=`cat <%= @pid_file %> 2>/dev/null`
|
|
if [ -n "$MYSQLD_PID" ] && [ -d "/proc/$MYSQLD_PID" ] ; then
|
|
PID_EXISTS=0
|
|
fi
|
|
fi
|
|
return $PID_EXISTS
|
|
}
|
|
|
|
# Use mysqladmin to ping the service as an invalid user over a socket
|
|
running() {
|
|
RUNNING=1
|
|
RESPONSE=`<%= @mysqladmin_bin %> --defaults-file=<%= @defaults_file %> --user=UNKNOWN_MYSQL_USER ping 2>&1`
|
|
local mret=$?
|
|
if pid_exists \
|
|
&& [ $mret -eq 0 ] \
|
|
|| [ `echo $RESPONSE | grep -q "Access denied for user"` ]; then
|
|
RUNNING=0
|
|
fi
|
|
return $RUNNING
|
|
}
|
|
|
|
writable_error_log() {
|
|
WRITABLE_ERROR_LOG=1
|
|
touch "<%= @error_log %>" 2>/dev/null
|
|
touchret=$?
|
|
if [ $touchret -eq 0 ]; then
|
|
chown <%= @config.run_user %>:<%= @config.run_group %> <%= @error_log %>
|
|
return 0
|
|
else
|
|
return $WRITABLE_ERROR_LOG
|
|
fi
|
|
}
|
|
|
|
print_start_success() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Starting <%= @mysql_name %>: " /bin/true
|
|
<% else %>
|
|
echo "Staring MySQL instance <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
print_start_failure() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Starting <%= @mysql_name %>: " /bin/false
|
|
<% else %>
|
|
echo "Could not start MySQL instance <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
print_reload_success() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Reloading <%= @mysql_name %>" /bin/true
|
|
<% else %>
|
|
echo "Reload success for <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
print_reload_failure() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Reloading <%= @mysql_name %>" /bin/false
|
|
<% else %>
|
|
echo "Reload failed for <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
print_stop_success() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Stopping <%= @mysql_name %>: " /bin/true
|
|
<% else %>
|
|
echo "Stopping MySQL instance <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
print_stop_failure() {
|
|
<% if node['platform_family'] == 'rhel' %>
|
|
action $"Stopping <%= @mysql_name %>: " /bin/false
|
|
<% else %>
|
|
echo "Could not stop MySQL instance <%= @mysql_name %>"
|
|
<% end %>
|
|
return 0;
|
|
}
|
|
|
|
start_command() {
|
|
# Attempt to start <%= @mysql_name %>
|
|
echo "Starting MySQL instance <%= @mysql_name %>"
|
|
|
|
local scl_name="<%= @scl_name %>"
|
|
|
|
if [ -z $scl_name ]; then
|
|
<%= @mysqld_safe_bin %> \
|
|
--defaults-file=<%= @defaults_file %> \
|
|
>/dev/null 2>&1 &
|
|
local pid=$!
|
|
else
|
|
scl enable $scl_name "<%= @mysqld_safe_bin %> \
|
|
--defaults-file=<%= @defaults_file %> \
|
|
>/dev/null 2>&1 &"
|
|
local pid=$!
|
|
fi
|
|
|
|
return $pid
|
|
}
|
|
|
|
####
|
|
# Init script actions
|
|
###
|
|
|
|
# Start <%= @mysql_name %>
|
|
start() {
|
|
# exit 0 if already running.
|
|
if running; then
|
|
print_start_success
|
|
return 0;
|
|
fi
|
|
|
|
# exit 4 if we can't write to error_log
|
|
if ! writable_error_log; then
|
|
print_start_failure
|
|
return 4
|
|
fi
|
|
|
|
# run program
|
|
start_command;
|
|
start_pid=$?
|
|
|
|
# Timeout loop
|
|
local TIMEOUT=$STARTTIMEOUT
|
|
while [ $TIMEOUT -gt 0 ]; do
|
|
if running; then
|
|
break
|
|
fi
|
|
|
|
let CURRENT_DELAY=${STARTTIMEOUT}-${TIMEOUT}
|
|
if [ $CURRENT_DELAY -gt $PID_DELAY ] \
|
|
&& ! pid_exists; then
|
|
break
|
|
fi
|
|
|
|
sleep 1
|
|
let TIMEOUT=${TIMEOUT}-1
|
|
done
|
|
|
|
if running; then
|
|
# successbaby.gif
|
|
print_start_success
|
|
return 0
|
|
elif ! pid_exists; then
|
|
# Handle startup failure
|
|
print_start_failure
|
|
return 3
|
|
elif [ $TIMEOUT -eq 0 ]; then
|
|
# Handle timeout
|
|
print_start_failure
|
|
# clean up
|
|
kill $start_pid 2>/dev/null
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Reload <%= @mysql_name %>
|
|
reload() {
|
|
<%= @mysqladmin_bin %> reload
|
|
local ret=$?
|
|
if [ $ret -eq 0 ]; then
|
|
print_reload_success;
|
|
else
|
|
print_reload_failure;
|
|
fi
|
|
return $ret
|
|
}
|
|
|
|
# Status of <%= @mysql_name %>
|
|
status() {
|
|
if running; then
|
|
echo "<%= @mysql_name %> is running"
|
|
return 0
|
|
else
|
|
echo "<%= @mysql_name %> is not running"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Stop <%= @mysql_name %>
|
|
stop() {
|
|
if running; then
|
|
echo "Stopping MySQL instance <%= @mysql_name %>"
|
|
if [ -f <%= @pid_file %> ]; then
|
|
/bin/kill `cat <%= @pid_file %> 2>/dev/null`
|
|
kstat=$?
|
|
fi
|
|
|
|
# Timeout loop
|
|
local TIMEOUT=$STARTTIMEOUT
|
|
while [ $TIMEOUT -gt 0 ]; do
|
|
if [ -e <%= @pid_file %> ]; then
|
|
sleep 1
|
|
fi
|
|
let TIMEOUT=${TIMEOUT}-1
|
|
done
|
|
|
|
return $kstat
|
|
else
|
|
echo "MySQL instance <%= @mysql_name %> Stopped."
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# main()
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
restart)
|
|
stop ; start
|
|
;;
|
|
reload)
|
|
reload
|
|
;;
|
|
*)
|
|
echo $"Usage: $0 {start|stop|status|restart|reload}"
|
|
exit 2
|
|
esac
|
|
|
|
exit $?
|