reset.sh 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #!/bin/bash
  2. set -e
  3. echo "========================================="
  4. echo "Webshop Scraper Reset Script"
  5. echo "========================================="
  6. echo ""
  7. echo "WARNING: This will:"
  8. echo " 1. Create a backup of all data"
  9. echo " 2. Stop the systemd service"
  10. echo " 3. Remove all user/variable data"
  11. echo " 4. Restart the systemd service"
  12. echo ""
  13. # Check if running as root
  14. if [ "$EUID" -ne 0 ]; then
  15. echo "Error: Please run as root (use sudo)"
  16. exit 1
  17. fi
  18. # Get the actual user who ran sudo
  19. ACTUAL_USER=${SUDO_USER:-$USER}
  20. # Configuration
  21. INSTALL_DIR="/opt/webshop-scraper"
  22. SERVICE_NAME="webshop-scraper"
  23. BACKUP_DIR="/var/backups/webshop-scraper"
  24. TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
  25. BACKUP_FILE="$BACKUP_DIR/webshop-scraper-backup-$TIMESTAMP.tar.gz"
  26. # Check if service is installed
  27. if [ ! -f "/etc/systemd/system/$SERVICE_NAME.service" ]; then
  28. echo "Error: Service $SERVICE_NAME is not installed"
  29. echo "Run ./scripts/install.sh first to install the service"
  30. exit 1
  31. fi
  32. # Check if installation directory exists
  33. if [ ! -d "$INSTALL_DIR" ]; then
  34. echo "Error: Installation directory $INSTALL_DIR does not exist"
  35. exit 1
  36. fi
  37. # Confirm reset
  38. echo "Are you sure you want to reset? This will remove all data! (yes/no)"
  39. read -r CONFIRM
  40. if [ "$CONFIRM" != "yes" ]; then
  41. echo "Reset cancelled."
  42. exit 0
  43. fi
  44. echo ""
  45. echo "========================================="
  46. echo "Step 1: Creating Backup"
  47. echo "========================================="
  48. echo ""
  49. # Create backup directory
  50. mkdir -p "$BACKUP_DIR"
  51. # Get service logs before stopping
  52. echo "Collecting service logs..."
  53. TEMP_LOG_FILE="/tmp/webshop-scraper-logs-$TIMESTAMP.log"
  54. if journalctl -u "$SERVICE_NAME" --no-pager > "$TEMP_LOG_FILE" 2>/dev/null; then
  55. echo "✓ Service logs collected"
  56. else
  57. echo "⚠ Warning: Could not collect service logs"
  58. TEMP_LOG_FILE=""
  59. fi
  60. # Create list of files to backup
  61. BACKUP_ITEMS=""
  62. # Check and add data directory
  63. if [ -d "$INSTALL_DIR/data" ]; then
  64. BACKUP_ITEMS="$BACKUP_ITEMS data"
  65. echo "✓ Found data directory ($(du -sh $INSTALL_DIR/data 2>/dev/null | cut -f1))"
  66. fi
  67. # Check and add .env file
  68. if [ -f "$INSTALL_DIR/.env" ]; then
  69. BACKUP_ITEMS="$BACKUP_ITEMS .env"
  70. echo "✓ Found .env file"
  71. fi
  72. # Add logs if collected
  73. if [ -n "$TEMP_LOG_FILE" ] && [ -f "$TEMP_LOG_FILE" ]; then
  74. BACKUP_ITEMS="$BACKUP_ITEMS -C /tmp $(basename $TEMP_LOG_FILE)"
  75. fi
  76. if [ -z "$BACKUP_ITEMS" ]; then
  77. echo "⚠ Warning: No data found to backup"
  78. else
  79. echo ""
  80. echo "Creating backup archive: $BACKUP_FILE"
  81. # Change to installation directory for tar
  82. cd "$INSTALL_DIR"
  83. # Create backup with progress
  84. if [ -n "$TEMP_LOG_FILE" ] && [ -f "$TEMP_LOG_FILE" ]; then
  85. # Backup with logs
  86. tar -czf "$BACKUP_FILE" $BACKUP_ITEMS 2>/dev/null
  87. else
  88. # Backup without logs
  89. tar -czf "$BACKUP_FILE" $BACKUP_ITEMS 2>/dev/null
  90. fi
  91. # Clean up temp log file
  92. [ -n "$TEMP_LOG_FILE" ] && [ -f "$TEMP_LOG_FILE" ] && rm -f "$TEMP_LOG_FILE"
  93. # Set ownership
  94. chown $ACTUAL_USER:$ACTUAL_USER "$BACKUP_FILE"
  95. chmod 600 "$BACKUP_FILE"
  96. BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
  97. echo "✓ Backup created: $BACKUP_FILE ($BACKUP_SIZE)"
  98. fi
  99. echo ""
  100. echo "========================================="
  101. echo "Step 2: Stopping Service"
  102. echo "========================================="
  103. echo ""
  104. # Stop service if running
  105. if systemctl is-active --quiet "$SERVICE_NAME"; then
  106. echo "Stopping service $SERVICE_NAME..."
  107. systemctl stop "$SERVICE_NAME"
  108. echo "✓ Service stopped"
  109. # Wait a moment to ensure service is fully stopped
  110. sleep 2
  111. else
  112. echo "Service is already stopped"
  113. fi
  114. echo ""
  115. echo "========================================="
  116. echo "Step 3: Removing Data"
  117. echo "========================================="
  118. echo ""
  119. # Remove data directory
  120. if [ -d "$INSTALL_DIR/data" ]; then
  121. echo "Removing data directory..."
  122. rm -rf "$INSTALL_DIR/data"
  123. echo "✓ Data directory removed"
  124. fi
  125. # Recreate empty data directory
  126. mkdir -p "$INSTALL_DIR/data"
  127. chown $ACTUAL_USER:$ACTUAL_USER "$INSTALL_DIR/data"
  128. echo "✓ Created fresh data directory"
  129. # Remove .env file (will be recreated by service)
  130. if [ -f "$INSTALL_DIR/.env" ]; then
  131. echo "Removing .env file..."
  132. rm -f "$INSTALL_DIR/.env"
  133. echo "✓ .env file removed"
  134. echo ""
  135. echo "⚠ WARNING: You need to restore or create a new .env file before starting the service!"
  136. echo " You can:"
  137. echo " 1. Copy from your project directory: sudo cp /path/to/project/.env $INSTALL_DIR/.env"
  138. echo " 2. Extract from backup: tar -xzf $BACKUP_FILE -C $INSTALL_DIR .env"
  139. echo " 3. Create manually: sudo nano $INSTALL_DIR/.env"
  140. fi
  141. echo ""
  142. echo "========================================="
  143. echo "Step 4: Restarting Service"
  144. echo "========================================="
  145. echo ""
  146. # Check if .env exists before restarting
  147. if [ ! -f "$INSTALL_DIR/.env" ]; then
  148. echo "⚠ Cannot start service: .env file is missing"
  149. echo ""
  150. echo "Please restore or create .env file first, then manually start the service:"
  151. echo " sudo systemctl start $SERVICE_NAME"
  152. else
  153. echo "Starting service $SERVICE_NAME..."
  154. systemctl start "$SERVICE_NAME"
  155. # Wait a moment and check status
  156. sleep 2
  157. if systemctl is-active --quiet "$SERVICE_NAME"; then
  158. echo "✓ Service started successfully"
  159. else
  160. echo "⚠ Warning: Service failed to start"
  161. echo ""
  162. echo "Check the status with:"
  163. echo " sudo systemctl status $SERVICE_NAME"
  164. echo " sudo journalctl -u $SERVICE_NAME -n 50"
  165. fi
  166. fi
  167. echo ""
  168. echo "========================================="
  169. echo "Reset Complete!"
  170. echo "========================================="
  171. echo ""
  172. if [ -f "$BACKUP_FILE" ]; then
  173. echo "Backup Information:"
  174. echo " Location: $BACKUP_FILE"
  175. echo " Size: $BACKUP_SIZE"
  176. echo " Owner: $ACTUAL_USER"
  177. echo ""
  178. echo "To restore from backup:"
  179. echo " 1. Stop service: sudo systemctl stop $SERVICE_NAME"
  180. echo " 2. Extract backup: sudo tar -xzf $BACKUP_FILE -C $INSTALL_DIR"
  181. echo " 3. Set permissions: sudo chown -R $ACTUAL_USER:$ACTUAL_USER $INSTALL_DIR"
  182. echo " 4. Restart service: sudo systemctl start $SERVICE_NAME"
  183. echo ""
  184. echo "All backups are stored in: $BACKUP_DIR"
  185. ls -lh "$BACKUP_DIR" 2>/dev/null || true
  186. else
  187. echo "⚠ No backup was created (no data found)"
  188. fi
  189. echo ""
  190. echo "Service Management:"
  191. echo " Start: sudo systemctl start $SERVICE_NAME"
  192. echo " Stop: sudo systemctl stop $SERVICE_NAME"
  193. echo " Restart: sudo systemctl restart $SERVICE_NAME"
  194. echo " Status: sudo systemctl status $SERVICE_NAME"
  195. echo " Logs: sudo journalctl -u $SERVICE_NAME -f"
  196. echo ""