#!/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 $?