Advertisement
Knogle

Untitled

Nov 3rd, 2018
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.56 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.4.2 2016-02-09 (YYYY-MM-DD)
  4. #
  5. ### BEGIN INIT INFO
  6. # Provides:   minecraft
  7. # Required-Start: $local_fs $remote_fs screen-cleanup
  8. # Required-Stop:  $local_fs $remote_fs
  9. # Should-Start:   $network
  10. # Should-Stop:    $network
  11. # Default-Start:  2 3 4 5
  12. # Default-Stop:   0 1 6
  13. # Short-Description:    Minecraft server
  14. # Description:    Starts the minecraft server
  15. ### END INIT INFO
  16.  
  17. #Settings
  18. SERVICE="${2}.jar"
  19. SCREENNAME=$2
  20. OPTIONS='nogui'
  21. USERNAME='root'
  22. WORLD='world'
  23. MCPATH="/home/minecraft_servers/${2}/"
  24. MINHEAP=4096
  25. HISTORY=4096
  26. CPU_COUNT=16
  27. Xms=1G
  28. JAVACMD="java"
  29. MAX_RAM="8192M"     # -Xmx
  30. JAVA_PARAMETERS="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=${CPU_COUNT} -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:+AggressiveOpts -Xms${Xms}"
  31. INVOCATION="${JAVACMD} -server -Xmx${MAX_RAM} ${JAVA_PARAMETERS} -jar ${SERVICE} nogui"
  32. Backuppath="/var/www/repo.openknogle.eu/Minecraft/modded/"
  33. Zielordner="${Backuppath}Minecraft_Modded_Backup_${SERVICE}_$(date +%Y-%m-%d_%H-%M).7z"
  34. Password="FASkog4AmtO1XIvGbkh8sqppYs51Eo7E7drbVpCSXOIsX4yyaUsIXvVEnLGQELMh3n1eqI23QiOGVhnsnlCX7GGMQKVapKCfoqnei2u8Ssb7ZDgbbbfYgpoo0DT"
  35.  
  36.  
  37.  
  38.  
  39. ME=`whoami`
  40. as_user() {
  41.   if [ "$ME" = "$USERNAME" ] ; then
  42.     bash -c "$1"
  43.   else
  44.     su - "$USERNAME" -c "$1"
  45.   fi
  46. }
  47.  
  48. mc_start() {
  49.   if  pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  50.     echo "$SERVICE is already running!"
  51.   else
  52.     echo "Starting $SERVICE..."
  53.     cd $MCPATH
  54.     as_user "cd $MCPATH && screen -h $HISTORY -dmS ${SCREENNAME} $INVOCATION"
  55.     sleep 7
  56.     if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  57.       echo "$SERVICE is now running."
  58.     else
  59.       echo "Error! Could not start $SERVICE!"
  60.     fi
  61.   fi
  62. }
  63.  
  64. mc_saveoff() {
  65.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  66.     echo "$SERVICE is running... suspending saves"
  67.    as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  68.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-off\"\015'"
  69.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  70.     sync
  71.     sleep 10
  72.   else
  73.     echo "$SERVICE is not running. Not suspending saves."
  74.   fi
  75. }
  76. mc_port(){
  77.  
  78.  
  79.       grep -n 'server-port=' "$MCPATH/server.properties"
  80.  
  81.  
  82. }
  83.  
  84. mc_saveon() {
  85.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  86.     echo "$SERVICE is running... re-enabling saves"
  87.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-on\"\015'"
  88.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  89.   else
  90.     echo "$SERVICE is not running. Not resuming saves."
  91.   fi
  92. }
  93.  
  94. mc_stop() {
  95.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  96.     echo "Stopping $SERVICE"
  97.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  98.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  99.     sleep 10
  100.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"stop\"\015'"
  101.     sleep 7
  102.   else
  103.     echo "$SERVICE was not running."
  104.   fi
  105.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  106.     echo "Error! $SERVICE could not be stopped."
  107.   else
  108.     echo "$SERVICE is stopped."
  109.   fi
  110. }
  111.  
  112. mc_update() {
  113.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  114.     echo "$SERVICE is running! Will not start update."
  115.   else
  116.     as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate https://launchermeta.mojang.com/mc/game/version_manifest.json"
  117.     if [ "$1" == "snapshot" ] ; then
  118.       JSONVERSION=`cd $MCPATH && cat versions | python -c "exec(\"import json,sys\nobj=json.load(sys.stdin)\nversion=obj['latest']['snapshot']\nfor v in obj['versions']:\n   if v['id']==version:\n    print(v['url'])\")"`
  119.     else
  120.       JSONVERSION=`cd $MCPATH && cat versions | python -c "exec(\"import json,sys\nobj=json.load(sys.stdin)\nversion=obj['latest']['release']\nfor v in obj['versions']:\n   if v['id']==version:\n    print(v['url'])\")"`
  121.     fi
  122.     as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate $JSONVERSION"
  123.     MC_SERVER_URL=`cd $MCPATH && cat versions | python -c 'import json,sys;obj=json.load(sys.stdin);print(obj["downloads"]["server"]["url"])'`
  124.     as_user "rm $MCPATH/versions"
  125.     as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update --no-check-certificate $MC_SERVER_URL"
  126.     if [ -f $MCPATH/minecraft_server.jar.update ] ; then
  127.       if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null` ; then
  128.         echo "You are already running the latest version of $SERVICE."
  129.       else
  130.         as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  131.         echo "Minecraft successfully updated."
  132.       fi
  133.     else
  134.       echo "Minecraft update could not be downloaded."
  135.     fi
  136.   fi
  137. }
  138.  
  139. mc_backup() {
  140. mc_saveoff
  141.  
  142. if [ ! -d "${MCPATH}" ]; then
  143.     echo "MCPATH existiert nicht!"
  144.     exit 1
  145. fi
  146. if [ -d "${Zielordner}" ]; then
  147.     echo "Zielordner bereits vorhanden!"
  148.     exit 1
  149. fi
  150.  
  151. 7z a -t7z -mx=0 -m0=LZMA2 -mmt=${CPU_COUNT} -p"${Password}" "${Zielordner}" "${MCPATH}" >> "${Backuppath}placeholder.txt"
  152. 7z h -scrcsha256 "${Zielordner}" >> "${Backuppath}placeholder.txt"
  153. mc_saveon
  154. }
  155.  
  156. mc_command() {
  157.   command="$1";
  158.   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  159.     pre_log_len=`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`
  160.     echo "$SERVICE is running... executing command"
  161.     as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"$command\"\015'"
  162.     sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  163.     # print output
  164.     tail -n $[`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/logs/latest.log"
  165.   fi
  166. }
  167.  
  168. #Start-Stop here
  169. case "$1" in
  170.   start)
  171.     mc_start
  172.     ;;
  173.   stop)
  174.     mc_stop
  175.     ;;
  176.   restart)
  177.     mc_stop
  178.     mc_start
  179.     ;;
  180.   update)
  181.     mc_stop
  182.     mc_backup
  183.     mc_update $2
  184.     mc_start
  185.     ;;
  186.   backup)
  187.     mc_backup
  188.     ;;
  189.   port)
  190.     mc_port
  191.     ;;
  192.   status)
  193.     if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  194.       echo "$SERVICE is running."
  195.     else
  196.       echo "$SERVICE is not running."
  197.     fi
  198.     ;;
  199.   command)
  200.     if [ $# -gt 1 ] ; then
  201.       shift
  202.       mc_command "$*"
  203.     else
  204.       echo "Must specify server command (try 'help'?)"
  205.     fi
  206.     ;;
  207.  
  208.   *)
  209.   echo "Usage: $0 {start|stop|update|backup|status|restart|command|port \"server command\"}"
  210.   exit 1
  211.   ;;
  212. esac
  213.  
  214. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement