Запуск Cassandra как службы на OpenSuse

Я пытаюсь запустить Cassandra как сервис на OpenSuse (Leap 42.1).

Я попытался установить с помощью apache-cassandra-2.1.11-bin.tar.gz, а затем скопировать /etc/init.d/cassandra из https://gist.github.com/sgomezvillamor/5458309. Однако сценарий запуска не предназначен для OpenSuse, как указано в system.log:

/etc/init.d/cassandra: строка 30: демон: команда не найдена.

Проблем не было бы, если бы был установщик, который корректно создавал скрипты, как это делается для некоторых других ОС. В поисках установочного пакета я нашел http://www.datastax.com/dev/blog/announcing-rpms-cassandra и попытался найти rpm на rpm.riptano.com, но не могу понять, какой из них будет работать в OpenSuse.

Какой из этих пакетов подойдет для OpenSuse? Или, как мне изменить сценарий запуска для Suse-fying?


person Hannu    schedule 17.11.2015    source источник


Ответы (2)


Я бы проверил эти инструкции для Cassandra 2.1: Установка DataStax Community 2.1 в системах на базе RHEL.

Я не уверен, что это даст вам 100% результат в системе OpenSUSE, но должно вас очень приблизить.

person BrianC    schedule 18.11.2015

Я заставил его работать с файлом /etc/init.d/cassandra:

#!/bin/bash
#
# /etc/init.d/cassandra
#
# Startup script for Cassandra
# 
# chkconfig: 2345 20 80
# description: Starts and stops Cassandra

#. /etc/rc.d/init.d/functions

export CASSANDRA_HOME=/opt/apache-cassandra-2.1.11
export CASSANDRA_CONF=$CASSANDRA_HOME/conf
export CASSANDRA_INCLUDE=$CASSANDRA_HOME/bin/cassandra.in.sh
#export CASSANDRA_OWNR=cassandra
export CASSANDRA_OWNR=root
#NAME="cassandra"
NAME="root"
log_file=/srv/cassandra/log/cassandra.log
pid_file=/var/run/cassandra/cassandra.pid
lock_file=/var/lock/subsys/$NAME
CASSANDRA_PROG=/opt/apache-cassandra-2.1.11/bin/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: "
        su $CASSANDRA_OWNR -c "$CASSANDRA_PROG -p $pid_file" > $log_file 2>&1
        retval=$?
        [ $retval -eq 0 ] && touch $lock_file
        echo "OK"
        ;;
    stop)
        # Cassandra shutdown
        echo -n "Shutdown Cassandra: "
        su $CASSANDRA_OWNR -c "kill `cat $pid_file`"
        retval=$?
        [ $retval -eq 0 ] && rm -f $lock_file
        for t in `seq 40`; do $0 status > /dev/null 2>&1 && sleep 0.5 || break; 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=`$0 status`
        if [[ $STATUS == "$NAME is stopped" ]]; then
            echo "OK"
        else
            echo "ERROR: could not stop $NAME:  $STATUS"
            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
person Hannu    schedule 14.01.2016