Advertisement
Guest User

Untitled

a guest
Jul 10th, 2012
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. #!/bin/bash
  2. #########################################################################
  3. # Backup script for minecraft servers with SCP to another site. #
  4. # Stops and starts specified minecraft server for 100% backups. #
  5. # Supports multiple minecraft servers on the same machine #
  6. # #
  7. # Author #
  8. # Pierre Christoffersen, www.nahaz.se #
  9. # Feel free to redistribute, change or improve, but leave original #
  10. # authors and contributers in comments. #
  11. # http://github.com/Nahaz/Minecraft-Backup-Bash-Script #
  12. # #
  13. # Exitcodes: #
  14. # 0=Completed with no errors #
  15. # 1=Backupd done, server not restarted #
  16. # 2=Failed #
  17. # #
  18. # Variables used: #
  19. # #
  20. # Minecraft-server related: #
  21. # MCDIR=/Dir/to/minecraft/server #
  22. # MCSRV=Name of server.jar used #
  23. # JXMS=512M #Amount of minimum ram for JVM #
  24. # JXMX=3072M #Amount of maximum ram for JVM #
  25. # GUI=nogui #nogui, don't change, only a var for future purposes #
  26. # WORLDNAME=Name of minecraft world #
  27. # SCREEN=Screen name minecraft server is running in #
  28. # #
  29. # Server restart/stop timer and message #
  30. # TIME=60 #Countdown in seconds to shutdown server #
  31. # MSG="Server restarting in "$TIME" seconds, back in a minute!" #
  32. # TRIES=3 #Number of tries to start/stop server before giving up #
  33. # #
  34. # Temporary directory and remote site for backup #
  35. # TMPDIR=/dir/to/tmp #
  36. # BCKSRV=HOSTNAME #Hostname of backupserver #
  37. # BCKDIR=/dir/on/backupserver/to/store/in #
  38. # #
  39. # Don't change these unless you understand what you're doing #
  40. # LOG=$TMP/mc.$WORLDNAME.fullbck.log #
  41. # OF=/tmp/$FILE #
  42. # BUDIR=$MCDIR/$WORLDNAME #
  43. # FILE=$WORLDNAME.$TIMESTAMP.fullbck.tar.gz #
  44. # TIMESTAMP=$(date +%y%m%d.%T) #
  45. # LOGSTAMP=$(date +%y%m%d\ %T) #
  46. #########################################################################
  47.  
  48. #Minecraft properties
  49. MCDIR=
  50. MCSRV=
  51. JXMS=
  52. JXMX=
  53. GUI=nogui
  54. WORLDNAME=world
  55. SCREEN=minecraft
  56.  
  57. #Restart properties
  58. TIME=30
  59. MSG="Server restarting in "$TIME" seconds, back in a minute!"
  60. TRIES=3
  61.  
  62. #Backup vars
  63. TMPDIR=
  64. BCKSRV=
  65. BCKDIR=
  66.  
  67. #no need to change these
  68. TIMESTAMP=$(date +%y%m%d.%T)
  69. LOGSTAMP=$(date +%y%m%d\ %T)
  70.  
  71. LOGFILE=$TMPDIR/mc.$WORLDNAME.fullbck.log
  72. BUDIR=$MCDIR/$WORLDNAME
  73. FILE=$WORLDNAME.$TIMESTAMP.fullbck.tar.gz
  74. OF=$TMPDIR/$FILE
  75.  
  76. #nifty functions, don't edit anything below
  77.  
  78. #Check if minecraft server is running, ONLINE == 1 if offline, ONLINE == 2 if running
  79. function srv_check () {
  80. ONLINE=$(ps aux | grep "java -Xms$JXMS -Xmx$JXMX -jar $MCSRV $GUI" | wc -l)
  81. }
  82.  
  83. function log () {
  84. echo "[${LOGSTAMP}] ${@}" >> $LOGFILE
  85. }
  86.  
  87. #Kill minecraft server, but post $MSG to server $TIME before shutdown and warn 5 seconds before shutdown. If "stop" don't work, kill $PID.
  88. function kill_mc() {
  89. screen -S $SCREEN -p 0 -X stuff "`printf "say $MSG\r"`"; sleep $TIME
  90. screen -S $SCREEN -p 0 -X stuff "`printf "say Going down in 10 seconds! Saving world...\r"`"
  91. screen -S $SCREEN -p 0 -X stuff "`printf "save-all\r"`"; sleep 5
  92. screen -S $SCREEN -p 0 -X stuff "`printf "stop\r"`"; sleep 5
  93. srv_check
  94. if [ $ONLINE == 1 ]; then
  95. log "Minecraft server shutdown successfully."
  96. else
  97. log "Minecraft server did NOT shutdown, will try with force."
  98. local PID=$(ps -e | grep "java -Xms$JXMS -Xmx$JXMX -jar $MCSRV $GUI" | grep -v grep | awk '{print $1;}')
  99. local STOP=$TRIES
  100. while [[ $STOP -gt 0 && $ONLINE == 2 ]]; do
  101. log "Try #${STOP} of stopping minecraft server."
  102. kill $PID
  103. srv_check
  104. STOP=$(($STOP-1))
  105. done
  106. if [ $STOP == 0 ]; then
  107. log "Could not kill minecraft server, exiting"
  108. exit 2
  109. else
  110. log "Killed minecraft server after ${STOP} number of tries, proceeding with full backup."
  111. fi
  112. fi
  113. }
  114. #Start minecraft server with $PARAMS
  115. function start_mc() {
  116. function java_start() {
  117. screen -S $SCREEN -p 0 -X stuff "`printf "cd $MCDIR\r"`"; sleep 1
  118. screen -S $SCREEN -p 0 -X stuff "`printf "java -Xms$JXMS -Xmx$JXMX -jar $MCSRV $GUI\r"`"; sleep 3
  119. }
  120. local PARAMS="screen -dmS $SCREEN java -Xms$JXMS -Xmx$JXMX -jar $MCSRV $GUI"
  121. java_start
  122. srv_check
  123. if [ $ONLINE == 2 ]; then
  124. log "Server started successfully with ${PARAMS}."
  125. else
  126. log "Server did not start, trying again."
  127. local START=0
  128. local SCREXIST=$(ps aux | grep "SCREEN -dmS $SCREEN" | wc -l)
  129. while [[ $START -lt 3 && $ONLINE == 1 ]]; do
  130. log "Try #"$START" of starting minecraft server."
  131. SCREXIST=$(ps aux | grep "SCREEN -dmS $SCREEN" | wc -l)
  132. if [ $SCREXIST == 1 ]; then
  133. log "Screen session not found, starting screen with -dmS ${SCREEN}."
  134. screen -dmS $SCREEN; sleep 1
  135. java_start
  136. else
  137. java_start
  138. fi
  139. srv_check
  140. START=$(($START+1))
  141. done
  142. if [ $START == 3 ]; then
  143. log "Server did not start after ${START} number of tries, exiting."
  144. exit 1
  145. else
  146. log "Server started after ${START} number of tries with ${PARAMS}"
  147. log "Backup complete."
  148. exit 0
  149. fi
  150. fi
  151. }
  152. function run_backup() {
  153. #Backup dir, output to $LOG
  154. tar -czf $OF $BUDIR
  155. if [ $? == 0 ]; then
  156. log "TAR of ${BUDIR} to ${OF} was successful."
  157. elif [ $? == 1 ]; then
  158. log "TAR of ${BUDIR} to ${OF} was successful, but backup is not 100% of ${BUDIR}, most likely because it was changed during reading."
  159. else
  160. log "TAR of ${BUDIR} to ${OF} was NOT successful, reason: ${?} FATAL ERROR."
  161. fi
  162. #SCP backup to $BCKSRV, output to $LOG
  163. scp $OF $BCKSRV:$BCKDIR
  164. if [ $? == 0 ]; then
  165. log "SCP of ${OF} to ${BCKSRV} was successful."
  166. else
  167. log "SCP of ${OF} to ${BCKSRV} was NOT successful, reason: ${?}:Some error ocurred."
  168. fi
  169.  
  170. log "Proceeding to start server..."
  171. start_mc
  172. }
  173.  
  174. #Is minecraft server running? yes - stop then continue, no - continue
  175. log "Beginning full backup of ${BUDIR}"
  176. case "$1" in
  177. backup)
  178. srv_check
  179. if [ $ONLINE == 2 ]; then
  180. kill_mc
  181. if [ $ONLINE == 1 ]; then
  182. run_backup
  183. fi
  184. else
  185. run_backup
  186. fi
  187. ;;
  188. restart)
  189. srv_check
  190. if [ $ONLINE == 2 ]; then
  191. kill_mc
  192. fi
  193. start_mc
  194. ;;
  195. stop)
  196. kill_mc
  197. ;;
  198. start)
  199. start_mc
  200. ;;
  201. status)
  202. srv_check
  203. if [ $ONLINE == 2 ]; then
  204. echo "Server is running"
  205. if [ $ONLINE == 1 ]; then
  206. echo "Server is not running"
  207. fi
  208. ;;
  209. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement