Advertisement
Guest User

Untitled

a guest
Dec 8th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1. #!/bin/bash
  2. # /etc/init.d/ftbb
  3. # version 0.4.2 2016-02-09 (YYYY-MM-DD)
  4. #
  5. ### BEGIN INIT INFO
  6. # Provides: ftbb
  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: ftbb server
  14. # Description: Starts the ftbb server
  15. ### END INIT INFO
  16.  
  17. #Settings
  18. SERVICE='SpongeBootstrap-0.6.0.jar'
  19. SCREENNAME='FTBB'
  20. OPTIONS='nogui'
  21. USERNAME='dude'
  22. WORLD='world'
  23. MCPATH='/FTB/FTBBeyond'
  24. BACKUPPATH='/media/remote.share/FTBB.backup'
  25. MAXHEAP=20480
  26. MINHEAP=20480
  27. HISTORY=2048
  28. CPU_COUNT=8
  29. INVOCATION="java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
  30. -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AlwaysPreTouch \
  31. -jar $SERVICE $OPTIONS"
  32.  
  33. ME=`whoami`
  34. as_user() {
  35. if [ "$ME" = "$USERNAME" ] ; then
  36. bash -c "$1"
  37. else
  38. su - "$USERNAME" -c "$1"
  39. fi
  40. }
  41.  
  42. mc_start() {
  43. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  44. echo "$SERVICE is already running!"
  45. else
  46. echo "Starting $SERVICE..."
  47. cd $MCPATH
  48. as_user "cd $MCPATH && screen -h $HISTORY -dmS ${SCREENNAME} $INVOCATION"
  49. sleep 7
  50. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  51. echo "$SERVICE is now running."
  52. else
  53. echo "Error! Could not start $SERVICE!"
  54. fi
  55. fi
  56. }
  57.  
  58. mc_saveoff() {
  59. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  60. echo "$SERVICE is running... suspending saves"
  61. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
  62. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-off\"\015'"
  63. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  64. sync
  65. sleep 10
  66. else
  67. echo "$SERVICE is not running. Not suspending saves."
  68. fi
  69. }
  70.  
  71. mc_saveon() {
  72. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  73. echo "$SERVICE is running... re-enabling saves"
  74. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-on\"\015'"
  75. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  76. else
  77. echo "$SERVICE is not running. Not resuming saves."
  78. fi
  79. }
  80.  
  81. mc_stop() {
  82. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  83. echo "Stopping $SERVICE"
  84. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
  85. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"save-all\"\015'"
  86. sleep 10
  87. as_user "screen -p 0 -S ${SCREENNAME} -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 ; 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 ; then
  101. echo "$SERVICE is running! Will not start update."
  102. else
  103. as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate https://launchermeta.mojang.com/mc/game/version_manifest.json"
  104. if [ "$1" == "snapshot" ] ; then
  105. 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']\")"`
  106. else
  107. 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']\")"`
  108. fi
  109. as_user "cd $MCPATH && wget -q -O $MCPATH/versions --no-check-certificate $JSONVERSION"
  110. MC_SERVER_URL=`cd $MCPATH && cat versions | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["downloads"]["server"]["url"]'`
  111. as_user "rm $MCPATH/versions"
  112. as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update --no-check-certificate $MC_SERVER_URL"
  113. if [ -f $MCPATH/minecraft_server.jar.update ] ; then
  114. if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null` ; then
  115. echo "You are already running the latest version of $SERVICE."
  116. else
  117. as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
  118. echo "Minecraft successfully updated."
  119. fi
  120. else
  121. echo "Minecraft update could not be downloaded."
  122. fi
  123. fi
  124. }
  125.  
  126. mc_backup() {
  127. mc_saveoff
  128.  
  129. NOW=`date "+%Y-%m-%d_%Hh%M"`
  130. BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
  131. echo "Backing up minecraft world..."
  132. #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
  133. as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"
  134.  
  135. echo "Backing up $SERVICE"
  136. as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
  137. #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
  138.  
  139. mc_saveon
  140.  
  141. echo "Compressing backup..."
  142. as_user "gzip -f \"$BACKUP_FILE\""
  143. echo "Done."
  144. }
  145.  
  146. mc_command() {
  147. command="$1";
  148. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  149. pre_log_len=`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`
  150. echo "$SERVICE is running... executing command"
  151. as_user "screen -p 0 -S ${SCREENNAME} -X eval 'stuff \"$command\"\015'"
  152. sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
  153. # print output
  154. tail -n $[`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/logs/latest.log"
  155. fi
  156. }
  157.  
  158. #Start-Stop here
  159. case "$1" in
  160. start)
  161. mc_start
  162. ;;
  163. stop)
  164. mc_stop
  165. ;;
  166. restart)
  167. mc_stop
  168. mc_start
  169. ;;
  170. update)
  171. mc_stop
  172. mc_backup
  173. mc_update $2
  174. mc_start
  175. ;;
  176. backup)
  177. mc_backup
  178. ;;
  179. status)
  180. if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
  181. echo "$SERVICE is running."
  182. else
  183. echo "$SERVICE is not running."
  184. fi
  185. ;;
  186. command)
  187. if [ $# -gt 1 ] ; then
  188. shift
  189. mc_command "$*"
  190. else
  191. echo "Must specify server command (try 'help'?)"
  192. fi
  193. ;;
  194.  
  195. *)
  196. echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  197. exit 1
  198. ;;
  199. esac
  200.  
  201. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement