Skip to content

Instantly share code, notes, and snippets.

@kevinbin
Created January 20, 2014 03:25
Show Gist options
  • Save kevinbin/8514392 to your computer and use it in GitHub Desktop.
Save kevinbin/8514392 to your computer and use it in GitHub Desktop.
MySQL Cluster ndbmtd process init start script
#!/bin/bash
# chkconfig: 345 60 40
# description: datanode start/stop script
### BEGIN INIT INFO
# Provides: datanode
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: datanode start/stop script
### END INIT INFO
NODEID=10
basename=`basename $0`
TRYCONN=24 #尝试连接管理节点次数
LOG=/var/log/ndbd_start.log
SBINDIR=<%=mysql_basedir%>/bin
MGM=<%=mysql_basedir%>/bin/ndb_mgm
PIDFILE=<%=data_dir%>/ndb_data/ndb_$NODEID.pid
OPTIONS="--ndb-nodeid=$NODEID"
PROGNAME="ndbmtd"
STARTNDBD="$SBINDIR/$PROGNAME $OPTIONS"
TEE="/usr/bin/tee -a $LOG"
DATE=`date "+%Y-%m-%d %H:%M:%S"`
LOCKFILE=""
if [ -d /var/lock/subsys ]; then
LOCKFILE=/var/lock/subsys/$basename
else
LOCKFILE=/var/lock/$basename
fi
if [ -e /etc/init.d/functions ]; then
. /etc/init.d/functions
else
. /lib/lsb/init-functions
fi
if [ ! -f $SBINDIR/$PROGNAME ]; then
echo -e "$PROGNAME executable not found in $SBINDIR"|$TEE
exit 1
fi
RETVAL=0
start() {
echo "$DATE Starting $PROGNAME $OPTIONS !"|$TEE
PID=`pgrep -f "$PROGNAME.+ndb-nodeid=$NODEID"`
if [ -n "$PID" ]; then
echo -e "$PROGNAME is already running with pid $PID\n"|$TEE
exit 0
else
if [ "$1" ]; then
OPTIONS=--initial
fi
$MGM -e show -t $TRYCONN > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo -e "Manager Node not connected\n"| $TEE
exit 1
fi
$STARTNDBD $OPTIONS |$TEE
RETVAL=$?
[ $RETVAL -eq 0 ] && /bin/touch $LOCKFILE
sleep 2
PID=`pgrep -f "$PROGNAME.+ndb-nodeid=$NODEID"`
if [ "$PID" ]; then
echo -e "OK: Success to start $PROGNAME\n" | $TEE
return 0
else
echo -e "Error: Failed to start $PROGNAME\n" | $TEE
return 1
fi
fi
}
stop() {
echo "$DATE Stopping $PROGNAME:"|$TEE
PID=`pgrep -f "$PROGNAME.+ndb-nodeid=$NODEID"`
nodenum=`$MGM -e 'all status' |grep started |wc -l `
if [[ $nodenum == 1 ]]; then
$MGM -e shutdown |$TEE
return 0
fi
if [ -n "$PID" ]; then
# pkill -15 -f "$PROGNAME.+ndb-nodeid=$NODEID"
$MGM -e "$NODEID stop" |$TEE
else
`rm -f ${PIDFILE}`
`rm -f ${LOCKFILE}`
echo -e "Error: Failed $PROGNAME not running !\n" | $TEE
return 0
fi
i=1
while [ "`pgrep -f "$PROGNAME.+ndb-nodeid=$NODEID"`" ];
do
if [ $i -eq 60 ]; then
echo -e "giving up after 60 secods\n"| $TEE
return 0
fi
i=`expr $i + 1`
sleep 1
done
PID=`pgrep $PROGNAME`
if [ -n "$PID" ]; then
echo -e "Error: Failed $PROGNAME not running\n" | $TEE
return 1
else
`rm -f ${PIDFILE}`
`rm -f ${LOCKFILE}`
echo -e "OK: Success to stop $PROGNAME\n" | $TEE
return 0
fi
}
case $1 in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
status)
status -p $PIDFILE $PROGNAME
RETVAL=$?
;;
restart)
stop
start
RETVAL=$?
;;
initial)
start --initial
RETVAL=$?
;;
*)
echo "Usage: $basename {start|stop|restart|initial|status}"
exit 1
;;
esac
exit $RETVAL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment