runit provides service management, and can be used to run Cassandra.

Create a /service/cassandra/run with the following:

 #!/bin/bash

cassandra_home=/opt/cassandra/current
cassandra_bin=${cassandra_home}/build/classes
CASSANDRA_CONF=${cassandra_home}/conf
CASSANDRA_USER=daemon
CASSANDRA_MEM=4g
CLASSPATH=$CASSANDRA_CONF:$cassandra_bin

for jar in $cassandra_home/lib/*.jar; do
  CLASSPATH=$CLASSPATH:$jar
done

ulimit -n 65535
cd var

exec chpst -u${CASSANDRA_USER} -e /service/cassandra/env -o 65535 \
/usr/bin/java \
      -ea \
      -Xms${CASSANDRA_MEM} \
      -Xmx${CASSANDRA_MEM} \
      -XX:TargetSurvivorRatio=90 \
      -XX:+AggressiveOpts \
      -XX:+UseParNewGC \
      -XX:+UseConcMarkSweepGC \
      -XX:+CMSParallelRemarkEnabled \
      -XX:+HeapDumpOnOutOfMemoryError \
      -XX:SurvivorRatio=128 \
      -XX:MaxTenuringThreshold=0 \
      -Dcom.sun.management.jmxremote.port=8080 \
      -Dcom.sun.management.jmxremote.ssl=false \
      -Dcom.sun.management.jmxremote.authenticate=false \
      -Dcassandra -Dstorage-config=${CASSANDRA_CONF} \
      -Dcassandra-foreground=yes \
      -cp ${CLASSPATH} \
      org.apache.cassandra.thrift.CassandraDaemon 2>&1

Assiming you setup the rest of your runit paths, you can now start cassandra with 'svc start /service/cassandra'.

  • No labels