Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # /etc/init.d/minecraft
- # version 1.0 2013-02-08
- ### BEGIN INIT INFO
- # Provides: minecraft
- # Required-Start: $local_fs $remote_fs
- # Required-Stop: $local_fs $remote_fs
- # Should-Start: $network
- # Should-Stop: $network
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: Minecraft server
- # Description: Starts the minecraft server
- ### END INIT INFO
- #Settings
- SERVICE='mc_server.jar'
- USERNAME="minecraft"
- MCPATH='/opt/CAH_147'
- CRASHLOG_DB_PATH='/home/minecraft/crashlogs/'
- JAVA_HOME='/usr/lib/jvm/java-7-oracle/jre'
- CPU_COUNT=1
- MEMORY_OPTS='-Xmx2G -Xms2G'
- JAVA_OPTS='-Xincgc'
- INVOCATION="${JAVA_HOME}/bin/java ${MEMORY_OPTS} ${JAVA_OPTS} -jar ${SERVICE} nogui"
- BACKUPPATH='/home/minecraft/backup'
- BACKUPDIR=`date +%b_%Y`
- CONSOLELOG='/home/minecraft/console.log'
- ME=`whoami`
- as_user() {
- if [ $ME == $USERNAME ] ; then
- bash -c "$1"
- else
- su - $USERNAME -c "$1"
- fi
- }
- is_running() {
- if ps ax | grep -v grep | grep java | grep -v -i SCREEN | grep $SERVICE > /dev/null
- then
- return 0
- else
- return 1
- fi
- }
- mc_start() {
- if is_running
- then
- echo "Tried to start but $SERVICE was already running!"
- return 1
- else
- echo "$SERVICE was not running... starting."
- cd $MCPATH
- as_user "cd $MCPATH && byobu -dmS minecraft bash -c '$INVOCATION 2>&1 | tee $CONSOLELOG'"
- sleep 7
- if is_running
- then
- echo "$SERVICE is now running."
- return 0
- else
- echo "Could not start $SERVICE."
- return 1
- fi
- fi
- }
- mc_saveoff() {
- if is_running
- then
- echo "$SERVICE is running... suspending saves"
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
- sync
- sleep 10
- else
- echo "$SERVICE was not running. Not suspending saves."
- fi
- }
- mc_saveon() {
- if is_running
- then
- echo "$SERVICE is running... re-enabling saves"
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
- else
- echo "$SERVICE was not running. Not resuming saves."
- fi
- }
- mc_kill() {
- pid=`ps ax | grep -v grep | grep java | grep -i SCREEN | grep $SERVICE | awk '{ print $1 }'`
- if [ -z $pid ]; then
- echo "unable to retrieve pid"
- else
- echo "killing process with pid $pid"
- kill $pid
- sleep 2
- if is_running; then
- echo "$SERVICE could not be killed... still running"
- else
- echo "$SERVICE killed"
- fi
- fi
- }
- mc_stop() {
- if is_running
- then
- echo "$SERVICE is running... stopping."
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
- as_user "byoub -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
- sleep 10
- as_user "byoub -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
- sleep 12
- else
- echo "$SERVICE was not running."
- fi
- if is_running
- then
- echo "$SERVICE could not be shut down cleanly... still running."
- mc_kill
- else
- echo "$SERVICE is shut down."
- fi
- }
- mc_backup() {
- echo "Backing up minecraft world"
- [ -d $BACKUPPATH/$BACKUPDIR ] || as_user "mkdir $BACKUPPATH/$BACKUPDIR"
- as_user "rdiff-backup $MCPATH $BACKUPPATH/$BACKUPDIR"
- echo "Backup complete"
- }
- mc_execservercmd() {
- if is_running
- then
- as_user "byobu -p 0 -S minecraft -X eval 'stuff \"$1\"\015'"
- else
- echo "$SERVICE was not running. Not executing command."
- fi
- }
- mc_dumpcrashlogs() {
- if is_running
- then
- as_user "cp $MCPATH/crash-reports/* $CRASHLOG_DB_PATH"
- as_user "mv $MCPATH/crash-reports/* $MCPATH/crash-reports.archive/"
- fi
- }
- #Start-Stop here
- case "$1" in
- start)
- mc_start
- ;;
- stop)
- mc_stop
- ;;
- restart)
- mc_stop
- mc_start
- ;;
- backup)
- mc_saveoff
- mc_backup
- mc_saveon
- ;;
- execservercmd)
- mc_execservercmd "$2"
- ;;
- dumpcrashlogs)
- mc_dumpcrashlogs
- ;;
- status)
- if is_running
- then
- echo "$SERVICE is running."
- else
- echo "$SERVICE is not running."
- fi
- ;;
- *)
- echo "Usage: /etc/init.d/minecraft {start|stop|restart|backup|execservercmd|dumpcrashlogs|status}"
- exit 1
- ;;
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment