Guest User

Untitled

a guest
Oct 19th, 2012
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/minecraft
  3. # version 0.3.7 2012-03-06 (YYYY-MM-DD)
  4.  
  5. ### BEGIN INIT INFO
  6. # Provides: minecraft
  7. # Required-Start: $local_fs $remote_fs
  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='minecraft_server.jar'
  19. OPTIONS='nogui'
  20. USERNAME='mcserv'
  21. WORLD='world'
  22. MCPATH='/home/mcserver/mc'
  23. BACKUPPATH='/home/mcserver/mc/minecraft.backup'
  24. CPU_COUNT=8
  25. INVOCATION="java -Xmx4024M -Xms4024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS"
  26.  
  27. ME=`whoami`
  28. as_user() {
  29. if [ $ME == $USERNAME ] ; then
  30. bash -c "$1"
  31. else
  32. su - $USERNAME -c "$1"
  33. fi
  34. }
  35.  
  36. mc_start() {
  37. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  38. then
  39. echo "$SERVICE is already running!"
  40. else
  41. echo "Starting $SERVICE..."
  42. cd $MCPATH
  43. as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
  44. sleep 7
  45. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  46. then
  47. echo "$SERVICE is now running."
  48. else
  49. echo "Error! Could not start $SERVICE!"
  50. fi
  51. fi
  52. }
  53.  
  54. mc_saveoff() {
  55. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  56. then
  57. echo "$SERVICE is running... suspending saves"
  58. as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  59. as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
  60. as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  61. sync
  62. sleep 10
  63. else
  64. echo "$SERVICE is not running. Not suspending saves."
  65. fi
  66. }
  67.  
  68. mc_saveon() {
  69. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  70. then
  71. echo "$SERVICE is running... re-enabling saves"
  72. as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
  73. as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  74. else
  75. echo "$SERVICE is not running. Not resuming saves."
  76. fi
  77. }
  78.  
  79. mc_stop() {
  80. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  81. then
  82. echo "Stopping $SERVICE"
  83. as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  84. as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
  85. sleep 10
  86. as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
  87. sleep 7
  88. else
  89. echo "$SERVICE was not running."
  90. fi
  91. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  92. then
  93. echo "Error! $SERVICE could not be stopped."
  94. else
  95. echo "$SERVICE is stopped."
  96. fi
  97. }
  98.  
  99. mc_update() {
  100. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  101. then
  102. echo "$SERVICE is running! Will not start update."
  103. else
  104. MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
  105. as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
  106. if [ -f $MCPATH/minecraft_server.jar.update ]
  107. then
  108. if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
  109. then
  110. echo "You are already running the latest version of $SERVICE."
  111. else
  112. as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  113. echo "Minecraft successfully updated."
  114. fi
  115. else
  116. echo "Minecraft update could not be downloaded."
  117. fi
  118. fi
  119. }
  120.  
  121. mc_backup() {
  122. mc_saveoff
  123.  
  124. NOW=`date "+%Y-%m-%d_%Hh%M"`
  125. BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  126. echo "Backing up minecraft world..."
  127. #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  128. as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
  129.  
  130. echo "Backing up $SERVICE"
  131. as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  132. #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
  133.  
  134. mc_saveon
  135.  
  136. echo "Compressing backup..."
  137. as_user "gzip -f \"$BACKUP_FILE\""
  138. echo "Done."
  139. }
  140.  
  141. mc_command() {
  142. command="$1";
  143. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  144. then
  145. pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
  146. echo "$SERVICE is running... executing command"
  147. as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
  148. sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  149. # print output
  150. tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  151. fi
  152. }
  153.  
  154. #Start-Stop here
  155. case "$1" in
  156. start)
  157. mc_start
  158. ;;
  159. stop)
  160. mc_stop
  161. ;;
  162. restart)
  163. mc_stop
  164. mc_start
  165. ;;
  166. update)
  167. mc_stop
  168. mc_backup
  169. mc_update
  170. mc_start
  171. ;;
  172. backup)
  173. mc_backup
  174. ;;
  175. status)
  176. if pgrep -u $USERNAME -f $SERVICE > /dev/null
  177. then
  178. echo "$SERVICE is running."
  179. else
  180. echo "$SERVICE is not running."
  181. fi
  182. ;;
  183. command)
  184. if [ $# -gt 1 ]; then
  185. shift
  186. mc_command "$*"
  187. else
  188. echo "Must specify server command (try 'help'?)"
  189. fi
  190. ;;
  191.  
  192. *)
  193. echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  194. exit 1
  195. ;;
  196. esac
  197.  
  198. exit 0
Advertisement
Add Comment
Please, Sign In to add comment