command_wipe.sh 9.0 KB

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