Created
March 20, 2020 08:40
-
-
Save amalgjose/74cf98e0110c27b6124b0adbb698d372 to your computer and use it in GitHub Desktop.
Patch for fixing the cassandra start problem in CentOS and RHEL 7 OS due to systemd update. Replace the /etc/rc.d/init.d/cassandra file with the below file and restart cassandra
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# /etc/init.d/cassandra | |
# | |
# Startup script for Cassandra | |
# | |
# chkconfig: 2345 80 20 | |
# description: Starts and stops Cassandra | |
# pidfile: /var/run/cassandra/cassandra.pid | |
### BEGIN INIT INFO | |
# Provides: cassandra | |
# Required-Start: $remote_fs $network $named $time | |
# Required-Stop: $remote_fs $network $named $time | |
# Should-Start: ntp mdadm | |
# Should-Stop: ntp mdadm | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: distributed storage system for structured data | |
# Description: Cassandra is a distributed (peer-to-peer) system for | |
# the management and storage of structured data. | |
### END INIT INFO | |
. /etc/rc.d/init.d/functions | |
export CASSANDRA_HOME=/usr/share/cassandra | |
export CASSANDRA_CONF=/etc/cassandra/conf | |
export CASSANDRA_INCLUDE=$CASSANDRA_HOME/cassandra.in.sh | |
export CASSANDRA_OWNR=cassandra | |
NAME="cassandra" | |
log_file=/var/log/cassandra/cassandra.log | |
pid_file=/var/run/cassandra/cassandra.pid | |
lock_file=/var/lock/subsys/$NAME | |
CASSANDRA_PROG=/usr/sbin/cassandra | |
# The first existing directory is used for JAVA_HOME if needed. | |
JVM_SEARCH_DIRS="/usr/lib/jvm/jre /usr/lib/jvm/jre-1.7.* /usr/lib/jvm/java-1.7.*/jre" | |
# Read configuration variable file if it is present | |
[ -r /etc/default/$NAME ] && . /etc/default/$NAME | |
# If JAVA_HOME has not been set, try to determine it. | |
if [ -z "$JAVA_HOME" ]; then | |
# If java is in PATH, use a JAVA_HOME that corresponds to that. This is | |
# both consistent with how the upstream startup script works, and with | |
# the use of alternatives to set a system JVM (as is done on Debian and | |
# Red Hat derivatives). | |
java="`/usr/bin/which java 2>/dev/null`" | |
if [ -n "$java" ]; then | |
java=`readlink --canonicalize "$java"` | |
JAVA_HOME=`dirname "\`dirname \$java\`"` | |
else | |
# No JAVA_HOME set and no java found in PATH; search for a JVM. | |
for jdir in $JVM_SEARCH_DIRS; do | |
if [ -x "$jdir/bin/java" ]; then | |
JAVA_HOME="$jdir" | |
break | |
fi | |
done | |
# if JAVA_HOME is still empty here, punt. | |
fi | |
fi | |
JAVA="$JAVA_HOME/bin/java" | |
export JAVA_HOME JAVA | |
case "$1" in | |
start) | |
# Cassandra startup | |
echo -n "Starting Cassandra: " | |
[ -d `dirname "$pid_file"` ] || \ | |
install -m 755 -o $CASSANDRA_OWNR -g $CASSANDRA_OWNR -d `dirname $pid_file` | |
#Commented as per CVSS Fix | |
#su $CASSANDRA_OWNR -c "$CASSANDRA_PROG -p $pid_file" > $log_file 2>&1 | |
#Added new | |
runuser -u $CASSANDRA_OWNR -- $CASSANDRA_PROG -p $pid_file > $log_file 2>&1 | |
retval=$? | |
#Added new | |
chown root.root $pid_file | |
[ $retval -eq 0 ] && touch $lock_file | |
echo "OK" | |
;; | |
stop) | |
# Cassandra shutdown | |
echo -n "Shutdown Cassandra: " | |
#Commented and added new line as per CVSS fix | |
#su $CASSANDRA_OWNR -c "kill `cat $pid_file`" | |
runuser -u $CASSANDRA_OWNR -- kill `cat $pid_file` | |
retval=$? | |
[ $retval -eq 0 ] && rm -f $lock_file | |
for t in `seq 40`; do | |
status -p $pid_file cassandra > /dev/null 2>&1 | |
retval=$? | |
if [ $retval -eq 3 ]; then | |
echo "OK" | |
exit 0 | |
else | |
sleep 0.5 | |
fi; | |
done | |
# Adding a sleep here to give jmx time to wind down (CASSANDRA-4483). Not ideal... | |
# Adam Holmberg suggests this, but that would break if the jmx port is changed | |
# for t in `seq 40`; do netstat -tnlp | grep "0.0.0.0:7199" > /dev/null 2>&1 && sleep 0.1 || break; done | |
sleep 5 | |
status -p $pid_file cassandra > /dev/null 2>&1 | |
retval=$? | |
if [ $retval -eq 3 ]; then | |
echo "OK" | |
else | |
echo "ERROR: could not stop $NAME" | |
exit 1 | |
fi | |
;; | |
reload|restart) | |
$0 stop | |
$0 start | |
;; | |
status) | |
status -p $pid_file cassandra | |
exit $? | |
;; | |
*) | |
echo "Usage: `basename $0` start|stop|status|restart|reload" | |
exit 1 | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment