cassandra - 如何将 Apache Cassandra 作为服务启动?

标签 cassandra

我在使用 Ubuntu 14 的 Amazon 实例上安装了 Apache Cassandra 2.1.0。是否可以将 Apache Cassandra 作为服务启动?

最佳答案

我没有评论的声誉,但请不要立即使用其他人建议的这些启动脚本!

其中存在以下问题:

  • 服务器以root用户启动,非常糟糕!
  • 错误检查有缺陷,$?睡一觉后肯定领先0
  • 由于使用 root 作为 PID 文件的创建者而产生的更多问题

  • 以下 Debian 的更正脚本:
    #!/bin/bash
    # Cassandra database
    ### BEGIN INIT INFO
    # Provides:             cassandra
    # Required-Start:       $remote_fs $all
    # Required-Stop:
    # Default-Start:        2 3 4 5
    # Default-Stop:         0 1 6
    # Short-Description:    Apache Cassandra database server
    # Description:          Apache Cassandra database server
    ### END INIT INFO
    
    . /lib/lsb/init-functions
    
    CASSANDRA_HOME=/home/db/packages/apache-cassandra
    CASSANDRA_BIN=$CASSANDRA_HOME/bin/cassandra
    CASSANDRA_NODETOOL=$CASSANDRA_HOME/bin/nodetool
    CASSANDRA_LOG=$CASSANDRA_HOME/logs/cassandra.log
    CASSANDRA_PID=/var/run/cassandra.pid
    CASSANDRA_LOCK=/var/lock/subsys/cassandra
    PROGRAM="cassandra"
    USER=db
    
    if [ ! -f $CASSANDRA_BIN ]; then
      echo "File not found: $CASSANDRA_BIN"
      exit 1
    fi
    
    RETVAL=0
    
    start() {
      log_action_begin_msg "Starting $PROGRAM"
      if [ -f $CASSANDRA_PID ] && checkpid `cat $CASSANDRA_PID`; then
        echo "Cassandra is already running."
        exit 0
      fi
      log_action_msg "Executing command as user $USER"
      TMPFILE=/tmp/cassandra.$RANDOM
      su --login $USER --command "$CASSANDRA_BIN -p $TMPFILE" >> $CASSANDRA_LOG 2>&1
      RETVAL=$?
      cat $TMPFILE > $CASSANDRA_PID
      rm $TMPFILE
      sleep 10
      if [ $RETVAL -eq 0 ]; then
        touch $CASSANDRA_LOCK
        log_action_end_msg $RETVAL
      else
        log_failure_msg "returned $RETVAL on startup"
      fi
      return $RETVAL
    }
    
    stop() {
      log_action_begin_msg "Stopping $PROGRAM: "
      if [ ! -f $CASSANDRA_PID ]; then
        log_action_msg "Cassandra is already stopped."
        exit 0
      fi
      $CASSANDRA_NODETOOL disablegossip
      $CASSANDRA_NODETOOL disablethrift
      $CASSANDRA_NODETOOL drain
      if kill `cat $CASSANDRA_PID`; then
        RETVAL=0
        rm -f $CASSANDRA_LOCK
        log_action_end_msg 0
      else
        RETVAL=1
        log_failure_msg "can't kill PID $CASSANDRA_PID"
      fi
      return $RETVAL
    }
    
    status_fn() {
      if [ -f $CASSANDRA_PID ] && checkpid `cat $CASSANDRA_PID`; then
        echo "Cassandra is running."
        exit 0
      else
        echo "Cassandra is stopped."
        exit 1
      fi
    }
    
    case "$1" in
      start)
        start
        ;;
      stop)
        stop
        ;;
      status)
        status_fn
        ;;
      restart)
        stop
        start
        ;;
      *)
        echo $"Usage: $PROGRAM {start|stop|restart|status}"
        RETVAL=3
    esac
    
    exit $RETVAL
    

    关于cassandra - 如何将 Apache Cassandra 作为服务启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544851/

    相关文章:

    cassandra - 计算大数据集上cassandra超时的查询

    windows - 就磁盘空间使用而言,Cassandra 是否足够适合存储日志?

    cassandra - Hector:如何删除行内的复合列

    java - 用 Java 将 DataFrame 写入 Cassandra 表

    Cassandra :选择 sstable_size_in_mb

    cassandra - 如何列出 Cassandra 中所有可用的键空间?

    cassandra - 如何配置cassandra进行远程连接

    cassandra - 可扩展的 Janusgraph 组件

    聚集列排序与二级索引的 Cassandra 性能

    cassandra - Cassandra 服务器上出现错误 : Unable to gossip with any seeds