SHARE
TWEET

minecraft.sh

a guest Oct 29th, 2010 8,071 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # original author : Relliktsohg
  3. # Huge thanks to Maine for his incremental backup
  4. # THanks to endofzero for his improved update routine
  5.  
  6. #       Configuration
  7.  
  8. MC_PATH=/home/minecraft
  9. SERVERMOD=0
  10. RUNECRAFT=0
  11. SCREEN_NAME="minecraft"
  12. MEMALOC=512
  13. DISPLAY_ON_LAUNCH=1
  14.  
  15. WORLD_NAME="world"
  16.  
  17. BKUP_PATH=$MC_PATH/backup
  18. BKUP_DAYS_INCR=2
  19. BKUP_DAYS_FULL=5
  20. BACKUP_FULL_LINK=${BKUP_PATH}/${WORLD_NAME}_full.tgz
  21. BACKUP_INCR_LINK=${BKUP_PATH}/${WORLD_NAME}_incr.tgz
  22.  
  23. CARTO_PATH=$MC_PATH/carto
  24. MAPS_PATH=/var/www/minecraftMaps
  25. LOG_TDIR=/var/www/minecraftLogs
  26. LOGS_DAYS=7
  27.  
  28. #       End of configuration
  29.  
  30. if [ $SERVERMOD -eq 1 ]
  31. then
  32.         if [ -e $MC_PATH/logs/*.log.lck ]
  33.         then
  34.                 ONLINE=1
  35.         else
  36.                 ONLINE=0
  37.         fi
  38. else
  39.         if [ -e $MC_PATH/server.log.lck ]
  40.         then
  41.                 #       ps -e | grep java | wc -l
  42.                 ONLINE=1
  43.         else
  44.                 ONLINE=0
  45.         fi
  46. fi
  47.  
  48. display() {
  49.         screen -R $SCREEN_NAME
  50. }
  51.  
  52. server_launch() {
  53.         echo "Launching minecraft server..."
  54.         if [ $SERVERMOD -eq 1 ]
  55.         then
  56.                 cd $MC_PATH; screen -m -d -S $SCREEN_NAME java -Xmx${MEMALOC}M -Xms${MEMALOC}M -Djava.net.preferIPv4Stack=true -jar Minecraft_Mod.jar nogui; sleep 1
  57.         else
  58.                 cd $MC_PATH; screen -m -d -S $SCREEN_NAME java -Xmx${MEMALOC}M -Xms${MEMALOC}M -Djava.net.preferIPv4Stack=true -jar minecraft_server.jar nogui; sleep 1
  59.         fi             
  60. }
  61.        
  62. server_stop() {
  63.         echo "Stopping minecraft server..."
  64.         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "stop.\r"`"; sleep 5
  65. }
  66.  
  67. if [ $# -gt 0 ]
  68. then
  69.         case $1 in
  70.  
  71.         #################################################################
  72.         "status")
  73.                 if [ $ONLINE -eq 1 ]
  74.                 then
  75.                         echo "Minecraft server seems ONLINE."
  76.                 else
  77.                         echo "Minecraft server seems OFFLINE."
  78.                 fi;;
  79.  
  80.         #################################################################
  81.         "start")
  82.                 if [ $ONLINE -eq 1 ]
  83.                 then
  84.                         echo "Server seems to be already running !"
  85.                         case $2 in
  86.                         "force")
  87.                                 kill `ps -e | grep java | cut -d " " -f 1`
  88.                                 rm -fr $MC_PATH/*.log.lck 2> /dev/null/;;
  89.                         esac
  90.                 else
  91.                         server_launch
  92.                         if [ $DISPLAY_ON_LAUNCH -eq 1 ]
  93.                         then
  94.                                 display
  95.                         fi     
  96.                 fi;;
  97.  
  98.         #################################################################
  99.     "stop")
  100.                 if [ $ONLINE -eq 1 ]
  101.                 then
  102.                         server_stop
  103.                 else
  104.                         case $2 in
  105.                         "force")
  106.                                 kill `ps -e | grep java | cut -d " " -f 1`
  107.                                 rm -fr $MC_PATH/*.log.lck 2> /dev/null/;;
  108.                         *)
  109.                                 echo "Server seems to be offline...";;
  110.                         esac
  111.                 fi;;
  112.  
  113.         #################################################################
  114.     "restart")
  115.                 if [ $ONLINE -eq 1 ]
  116.                 then
  117.                         case $2 in
  118.                         "warn")
  119.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Server will restart in 30s !\r"`"; sleep 20
  120.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Server will restart in 10s !\r"`"; sleep 10;;
  121.                         esac
  122.                         server_stop
  123.                 fi
  124.                 server_launch
  125.                 if [ $DISPLAY_ON_LAUNCH -eq 1 ]
  126.                 then
  127.                         display
  128.                 fi;;
  129.                
  130.         #################################################################
  131.         "logs")
  132.                 mkdir -p $LOG_TDIR             
  133.                 cd $LOG_TDIR
  134.  
  135.                 case $2 in
  136.                 "clean")
  137.                         DATE=$(date +%d-%m --date "$LOGS_DAYS day ago")
  138.                         if [ -e logs-$DATE ]
  139.                         then
  140.                                 mkdir -p $BKUP_PATH/logs
  141.                                 mv logs-$DATE $BKUP_PATH/logs/
  142.                         fi
  143.                 ;;
  144.                 esac
  145.                
  146.                 DATE=$(date +%d-%m)
  147.                 LOG_NEWDIR=logs-$DATE
  148.                 if [ -e $LOG_TDIR/$LOG_NEWDIR ]
  149.                 then
  150.                         rm $LOG_TDIR/$LOG_NEWDIR/*
  151.                 else
  152.                         mkdir $LOG_TDIR/$LOG_NEWDIR
  153.                 fi
  154.                        
  155.                 DATE=$(date +%d-%m-%Hh%M)
  156.                 LOG_TFILE=logs-$DATE.log
  157.                
  158.                 if [ $SERVERMOD -eq 1 ]
  159.                 then
  160.                         if [ $ONLINE -eq 1 ]
  161.                         then
  162.                                 LOG_LCK=$(basename $MC_PATH/logs/*.log.lck .log.lck)
  163.                                 echo "Found a log lock : $LOG_LCK"
  164.                         else
  165.                                 LOG_LCK=""
  166.                         fi
  167.  
  168.                         cd $MC_PATH/logs/
  169.                         for i in *
  170.                         do
  171.                                 if [ $i != $LOG_LCK.log.lck ] # skip du fichier lck
  172.                                 then
  173.                                         cat $i >> $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE
  174.                                         if [ $i != $LOG_LCK.log ]       # On ne supprime pas le fichier log courant, si le serv est en route
  175.                                         then
  176.                                                 rm $i
  177.                                         fi
  178.                                 fi
  179.                         done
  180.                 else
  181.                         cd $MC_PATH
  182.                         cat server.log >> $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE
  183.                 fi
  184.  
  185.                 if [ -e $LOG_TDIR/ip-list.log ]
  186.                 then
  187.                         cat $LOG_TDIR/ip-list.log | sort | uniq > $LOG_TDIR/templist.log
  188.                 fi
  189.                
  190.                 cat $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE | egrep '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+.+logged in'  | sed -e 's/.*\[INFO\]\s//g' -e 's/\[\//\t/g' -e 's/:.*//g' >> $LOG_TDIR/templist.log
  191.                 cat $LOG_TDIR/templist.log | sort | uniq -w 4 > $LOG_TDIR/ip-list.log
  192.                 rm $LOG_TDIR/templist.log
  193.  
  194.                 cat $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE | egrep 'logged in|lost connection' | sed -e 's/.*\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\[INFO\].\([a-zA-Z0-9_]\{1,\}\).\{1,\}logged in/\1\t\2 : connected/g' -e 's/.*\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\[INFO\].\([a-zA-Z0-9_]\{1,\}\).lost connection.*/\1\t\2 : disconnected/g' >> $LOG_TDIR/$LOG_NEWDIR/connexions-$DATE.log
  195.  
  196.                 cat $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE | egrep '<[a-zA-Z0-9_]+>|\[CONSOLE\]' | sed -e 's/.*\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\[INFO\]./\1 /g' >> $LOG_TDIR/$LOG_NEWDIR/chat-$DATE.log
  197.  
  198.                 cat $LOG_TDIR/$LOG_NEWDIR/$LOG_TFILE | egrep 'Internal exception|error' | sed -e 's/.*\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).\[INFO\]./\1\t/g' >> $LOG_TDIR/$LOG_NEWDIR/errors-$DATE.log
  199.         ;;
  200.  
  201.         #################################################################
  202.         "backup")
  203.  
  204.                 mkdir -p $BKUP_PATH
  205.                        
  206.                 if [ -e $MC_PATH/$WORLD_NAME ]
  207.                 then
  208.                         if [ $ONLINE -eq 1 ]
  209.                         then
  210.                                 echo "Server running, warning players : backup in 10s."
  211.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Backing up the map in 10s\r"`"; sleep 10
  212.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Now backing up the map...\r"`"
  213.                                 echo "Issuing save-all command, wait 5s..."
  214.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-all\r"`"; sleep 5
  215.                                 echo "Issuing save-off command..."
  216.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-off\r"`"; sleep 1
  217.                         fi
  218.                        
  219.                         cd $BKUP_PATH
  220.  
  221.             DATE=$(date +%Y-%m-%d-%Hh%M)
  222.             FILENAME=$WORLD_NAME-$DATE
  223.             BACKUP_FILES=$BKUP_PATH/list.$DATE
  224.  
  225.                         if test `date +%H` -eq 0 -o ! -f $BACKUP_FULL_LINK
  226.             then
  227.                                 # Make full backup, and remove old incrementals
  228.                 FILENAME=$FILENAME-full.tgz
  229.  
  230.                 # Remove incrementals older than $BKUP_DAYS_INCR
  231.                 # Remove full archives older than $BKUP_DAYS_FULL
  232.                 find ./$WORLD_NAME-*-incr.tgz -type f -mtime +$BKUP_DAYS_INCR -print > purgelist
  233.                 find ./$WORLD_NAME-*-full.tgz -type f -mtime +$BKUP_DAYS_FULL -print >> purgelist
  234.                 rm -f `cat purgelist`
  235.                 rm -f purgelist
  236.  
  237.                 # Now make our full backup
  238.                 pushd $MC_PATH
  239.                 find $WORLD_NAME -type f -print > $BACKUP_FILES
  240.                 tar -zcvf $BKUP_PATH/$FILENAME --files-from=$BACKUP_FILES
  241.                 popd
  242.  
  243.                 rm -f $BACKUP_FULL_LINK $BACKUP_INCR_LINK
  244.                 ln -s $FILENAME $BACKUP_FULL_LINK
  245.             else
  246.                 # Make incremental backup
  247.                 FILENAME=$FILENAME-incr.tgz
  248.  
  249.                 pushd $MC_PATH
  250.                 find $WORLD_NAME -newer $BACKUP_FULL_LINK -type f -print > $BACKUP_FILES
  251.                 tar -zcvf $BKUP_PATH/$FILENAME --files-from=$BACKUP_FILES
  252.                 popd
  253.  
  254.                 rm -f $BACKUP_INCR_LINK
  255.                 ln -s $FILENAME $BACKUP_INCR_LINK
  256.             fi
  257.  
  258.             rm -f $BACKUP_FILES
  259.                        
  260.                         if [ $ONLINE -eq 1 ]
  261.                         then
  262.                                 echo "Issuing save-on command..."
  263.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-on\r"`"; sleep 1
  264.                                 screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Backup is done, have fun !\r"`"
  265.                         fi
  266.                         echo "Backup process is over."
  267.                 else
  268.                         echo "The world \"$WORLD_NAME\" does not exist.";
  269.                 fi;;
  270.  
  271.         #################################################################
  272.         "cartography")
  273.  
  274.                 if [ -e $CARTO_PATH ]  
  275.                 then
  276.                         if [ -e $MC_PATH/$WORLD_NAME ]
  277.                         then
  278.                                 if [ $ONLINE -eq 1 ]
  279.                                 then
  280.                                         echo "Issuing save-all command, wait 5s...";
  281.                                         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-all\r"`"; sleep 5
  282.                                         echo "Issuing save-off command...";
  283.                                         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-off\r"`"; sleep 1
  284.                                         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Map cartography has begun.\r"`"
  285.                                 fi
  286.                                
  287.                                 mkdir -p $MAPS_PATH
  288.                                
  289.                                 DATE=$(date +%d-%m-%Y-%Hh%M)
  290.                                 FILENAME=$WORLD_NAME-map-$DATE
  291.                                 cd $CARTO_PATH
  292.                                 echo "Cartography in progress..."
  293.                                 ./c10t -w $MC_PATH/$WORLD_NAME/ -o $FILENAME.png -q -s
  294.                                 mv *.png $MAPS_PATH
  295.                                 cd $MC_PATH
  296.                                 echo "Cartography is done."
  297.                                
  298.                                 if [ $ONLINE -eq 1 ]
  299.                                 then
  300.                                         echo "Issuing save-on command..."
  301.                                         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "save-on\r"`"; sleep 1
  302.                                         screen -S $SCREEN_NAME -p 0 -X stuff "`printf "say Map cartography is done.\r"`"
  303.                                 fi
  304.  
  305.                         else
  306.                                 echo "The world \"$WORLD_NAME\" does not exist.";
  307.                         fi
  308.                 else
  309.                         echo "The path to cartographier seems to be wrong."
  310.                 fi;;
  311.        
  312.         #################################################################
  313.         "update")
  314.        
  315.                 if [ $ONLINE -eq 1 ]
  316.                 then
  317.                         server_stop
  318.                 fi
  319.                
  320.                 mkdir -p $BKUP_PATH
  321.                
  322.                 echo "Backing up current binaries..."
  323.                 DATE=$(date +%d-%m-%Y)                 
  324.                 cd $MC_PATH
  325.                 if [ $SERVERMOD -eq 1 ]
  326.                 then
  327.                         tar -czf minecraft_server-$DATE.tar.gz minecraft_server.jar Minecraft_Mod.jar
  328.                         rm Minecraft_Mod.jar
  329.                 else
  330.                         tar -czf minecraft_server-$DATE.tar.gz minecraft_server.jar
  331.                 fi
  332.                 mv minecraft_server-$DATE.tar.gz $BKUP_PATH
  333.  
  334.                 echo "Downloading new binaries..."
  335.                 wget -N http://www.minecraft.net/download/minecraft_server.jar
  336.                 if [ $SERVERMOD -eq 1 ]
  337.                 then
  338.                         "Downloading hey0's serverMod..."
  339.                         mkdir -p ModTmp; cd ModTmp/
  340.                         wget -O Minecraft_Mod.zip http://hey0.net/get.php?dl=serverbeta
  341.                         unzip Minecraft_Mod.zip
  342.                         cp bin/Minecraft_Mod.jar $MC_PATH/Minecraft_Mod.jar
  343.                         cd $MC_PATH; rm -rf ModTmp    
  344.                 fi
  345.                 if [ $RUNECRAFT -eq 1 ]
  346.                 then
  347.                         echo "Downloading Runecraft..."
  348.                         mkdir -p ModTmp; cd ModTmp/
  349.                         wget http://llama.cerberusstudios.net/runecraft_latest.zip
  350.                         unzip runecraft_latest.zip
  351.                         jar uvf $MC_PATH/minecraft_server.jar in.class o.class mm.class rm.class rn.class rt.class
  352.                         cd $MC_PATH; rm -rf ModTmp
  353.                 fi
  354.  
  355.                 server_launch
  356.                 if [ $DISPLAY_ON_LAUNCH -eq 1 ]
  357.                 then
  358.                         display
  359.                 fi;;
  360.                                
  361.         #################################################################
  362.         *)
  363.                 echo "Usage : minecraft <status | start [force] | stop | restart [warn] | logs [clean] | backup [clean] | cartography | update>";
  364.         esac
  365.  
  366. else
  367.         if [ $ONLINE -eq 1 ]
  368.         then
  369.                 display
  370.         else
  371.                 echo "Minecraft server seems to be offline..."
  372.         fi
  373. fi
  374. exit 0
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top