Advertisement
Guest User

Untitled

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