command_wipe.sh 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #!/bin/bash
  2. # LinuxGSM command_backup.sh function
  3. # Author: Daniel Gibbs
  4. # Contributor: UltimateByte
  5. # Website: https://linuxgsm.com
  6. # Description: Wipes server data, useful after updates for some games like Rust
  7. fn_commandname(){
  8. commandname="WIPE"
  9. commandaction="Wiping"
  10. functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  11. }
  12. fn_commandname
  13. # Provides an exit code upon error.
  14. fn_wipe_exit_code(){
  15. ((exitcode=$?))
  16. if [ "${exitcode}" != 0 ]; then
  17. fn_script_log_fatal "${currentaction}"
  18. core_exit.sh
  19. else
  20. fn_print_ok_eol_nl
  21. fi
  22. }
  23. # Removes files to wipe server.
  24. fn_wipe_server_files(){
  25. fn_print_start_nl "Wiping server"
  26. fn_script_log_info "Wiping server"
  27. # Wipe procedural map.
  28. if [ "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.map")" ]; then
  29. echo -en "removing procedural map proceduralmap.*.map file(s)..."
  30. fn_sleep_time
  31. fn_script_log_info "Removing procedural map file(s): ${serveridentitydir}/proceduralmap.*.map"
  32. find "${serveridentitydir:?}" -type f -name "proceduralmap.*.map" -delete | tee -a "${lgsmlog}"
  33. fn_wipe_exit_code
  34. fn_sleep_time
  35. else
  36. echo -e "no procedural map file to remove"
  37. fn_sleep_time
  38. fn_script_log_pass "No procedural map file to remove"
  39. fi
  40. # Wipe procedural map save.
  41. if [ "$(find "${serveridentitydir}" -type f -name "proceduralmap.*.sav")" ]; then
  42. echo -en "removing map saves proceduralmap.*.sav file(s)..."
  43. fn_sleep_time
  44. fn_script_log_info "Removing procedural map save(s): ${serveridentitydir}/proceduralmap.*.sav"
  45. find "${serveridentitydir:?}" -type f -name "proceduralmap.*.sav" -delete | tee -a "${lgsmlog}"
  46. fn_wipe_exit_code
  47. fn_sleep_time
  48. else
  49. echo -e "no procedural map save to remove"
  50. fn_sleep_time
  51. fn_script_log_pass "No procedural map save to remove"
  52. fi
  53. # Wipe Barren map.
  54. if [ "$(find "${serveridentitydir}" -type f -name "barren*.map")" ]; then
  55. echo -en "removing barren map barren*.map file(s)..."
  56. fn_sleep_time
  57. fn_script_log_info "Removing map file(s): ${serveridentitydir}/barren*.map"
  58. find "${serveridentitydir:?}" -type f -name "barren*.map" -delete | tee -a "${lgsmlog}"
  59. fn_wipe_exit_code
  60. fn_sleep_time
  61. else
  62. echo -e "no barren map file to remove"
  63. fn_sleep_time
  64. fn_script_log_pass "No barren map file to remove"
  65. fi
  66. # Wipe barren map save.
  67. if [ "$(find "${serveridentitydir}" -type f -name "barren*.sav")" ]; then
  68. echo -en "removing barren map saves barren*.sav file(s)..."
  69. fn_sleep_time
  70. fn_script_log_info "Removing barren map save(s): ${serveridentitydir}/barren*.sav"
  71. find "${serveridentitydir:?}" -type f -name "barren*.sav" -delete | tee -a "${lgsmlog}"
  72. fn_wipe_exit_code
  73. fn_sleep_time
  74. else
  75. echo -e "no barren map save to remove"
  76. fn_sleep_time
  77. fn_script_log_pass "No barren map save to remove."
  78. fi
  79. # Wipe user dir, might be a legacy thing, maybe to be removed.
  80. if [ -d "${serveridentitydir}/user" ]; then
  81. echo -en "removing user directory..."
  82. fn_sleep_time
  83. fn_script_log_info "removing user directory: ${serveridentitydir}/user"
  84. rm -rf "${serveridentitydir:?}/user"
  85. fn_wipe_exit_code
  86. fn_sleep_time
  87. # We do not print additional information if there is nothing to remove since this might be obsolete.
  88. fi
  89. # Wipe storage dir, might be a legacy thing, maybe to be removed.
  90. if [ -d "${serveridentitydir}/storage" ]; then
  91. echo -en "removing storage directory..."
  92. fn_sleep_time
  93. fn_script_log_info "removing storage directory: ${serveridentitydir}/storage"
  94. rm -rf "${serveridentitydir:?}/storage"
  95. fn_wipe_exit_code
  96. fn_sleep_time
  97. # We do not print additional information if there is nothing to remove since this might be obsolete.
  98. fi
  99. # Wipe sv.files.
  100. if [ "$(find "${serveridentitydir}" -type f -name "sv.files.*.db")" ]; then
  101. echo -en "removing server misc srv.files*.db file(s)..."
  102. fn_sleep_time
  103. fn_script_log_info "Removing server misc files: ${serveridentitydir}/sv.files.*.db"
  104. find "${serveridentitydir:?}" -type f -name "sv.files.*.db" -delete | tee -a "${lgsmlog}"
  105. fn_wipe_exit_code
  106. fn_sleep_time
  107. # No further information if not found because it should I could not get this file showing up.
  108. fi
  109. # Wipe player death files.
  110. if [ "$(find "${serveridentitydir}" -type f -name "player.deaths.*.db")" ]; then
  111. echo -en "removing player deaths player.deaths.*.db file(s)..."
  112. fn_sleep_time
  113. fn_script_log_info "Removing player death files: ${serveridentitydir}/player.deaths.*.db"
  114. find "${serveridentitydir:?}" -type f -name "player.deaths.*.db" -delete | tee -a "${lgsmlog}"
  115. fn_wipe_exit_code
  116. fn_sleep_time
  117. else
  118. echo -e "no player death to remove"
  119. fn_sleep_time
  120. fn_script_log_pass "No player death to remove"
  121. fi
  122. # Wipe blueprints only if full-wipe command was used.
  123. if [ "${fullwipe}" == "1" ]; then
  124. if [ "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]; then
  125. echo -en "removing blueprints player.blueprints.*.db file(s)..."
  126. fn_sleep_time
  127. fn_script_log_info "Removing blueprint file(s): ${serveridentitydir}/player.blueprints.*.db"
  128. find "${serveridentitydir:?}" -type f -name "player.blueprints.*.db" -delete | tee -a "${lgsmlog}"
  129. fn_wipe_exit_code
  130. fn_sleep_time
  131. else
  132. echo -e "no blueprint file to remove"
  133. fn_sleep_time
  134. fn_script_log_pass "No blueprint file to remove"
  135. fi
  136. elif [ "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]; then
  137. echo -e "keeping blueprints"
  138. fn_sleep_time
  139. fn_script_log_info "Keeping blueprints"
  140. else
  141. echo -e "no blueprints found"
  142. fn_sleep_time
  143. fn_script_log_pass "No blueprints found"
  144. fi
  145. # Wipe some logs that might be there.
  146. if [ "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]; then
  147. echo -en "removing Log files..."
  148. fn_sleep_time
  149. fn_script_log_info "Removing log files: ${serveridentitydir}/Log.*.txt"
  150. find "${serveridentitydir:?}" -type f -name "Log.*.txt" -delete
  151. fn_wipe_exit_code
  152. fn_sleep_time
  153. # We do not print additional information if there are no logs to remove.
  154. fi
  155. }
  156. fn_stop_warning(){
  157. fn_print_warn "this game server will be stopped during wipe"
  158. fn_script_log_warn "this game server will be stopped during wipe"
  159. totalseconds=3
  160. for seconds in {3..1}; do
  161. fn_print_warn "this game server will be stopped during wipe: ${totalseconds}"
  162. totalseconds=$((totalseconds - 1))
  163. sleep 1
  164. if [ "${seconds}" == "0" ]; then
  165. break
  166. fi
  167. done
  168. fn_print_warn_nl "this game server will be stopped during wipe"
  169. }
  170. fn_wipe_warning(){
  171. fn_print_warn "wipe is about to start"
  172. fn_script_log_warn "wipe is about to start"
  173. totalseconds=3
  174. for seconds in {3..1}; do
  175. fn_print_warn "wipe is about to start: ${totalseconds}"
  176. totalseconds=$((totalseconds - 1))
  177. sleep 1
  178. if [ "${seconds}" == "0" ]; then
  179. break
  180. fi
  181. done
  182. fn_print_warn "wipe is about to start"
  183. }
  184. fn_print_dots ""
  185. check.sh
  186. # Check if there is something to wipe.
  187. if [ -d "${serveridentitydir}/storage" ]||[ -d "${serveridentitydir}/user" ]||[ -n "$(find "${serveridentitydir}" -type f -name "proceduralmap*.sav")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "barren*.sav")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "Log.*.txt")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "player.deaths.*.db")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "player.blueprints.*.db")" ]||[ -n "$(find "${serveridentitydir}" -type f -name "sv.files.*.db")" ]; then
  188. fn_wipe_warning
  189. check_status.sh
  190. if [ "${status}" != "0" ]; then
  191. fn_stop_warning
  192. exitbypass=1
  193. command_stop.sh
  194. fn_commandname
  195. fn_wipe_server_files
  196. exitbypass=1
  197. command_start.sh
  198. fn_commandname
  199. else
  200. fn_wipe_server_files
  201. fi
  202. fn_print_ok_nl ""
  203. fn_script_log_pass "Wiping server"
  204. fi
  205. core_exit.sh