Juffo-Wup

Untitled

Jan 27th, 2025
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.70 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # If the script has already restarted a scan within LOCKOUT_INTERVAL seconds, lock that
  4. # filesystem out from any further automatic restarts.
  5. LOCKOUT_INTERVAL=1800 #30 minutes
  6.  
  7. FS_FILE="/home/<redacted>/check_sf/filesystems.txt"
  8. LRT_FILE="/home/<redacted>/check_sf/last_restart_times.txt"
  9. LO_FILE="/home/<redacted>/check_sf/locked_out.txt"
  10. LOGGING_FILE="/home/<redacted>/check_sf/check_sf.log"
  11.  
  12.  
  13. declare -A FILESYSTEMS
  14. declare -A LAST_RESTART_TIMES
  15. declare -A LOCKED_OUT
  16.  
  17.  
  18. LOG="Script running at `date`\n"
  19. EMAIL=""
  20.  
  21. #
  22. # Read state from filesystem
  23. #
  24.  
  25. while IFS="=" read -r key value; do
  26.         if [[ -n "$key" && -n "$value" ]]; then
  27.                 FILESYSTEMS["$key"]="$value"
  28.         fi
  29. done < $FS_FILE
  30.  
  31. while IFS="=" read -r key value; do
  32.         if [[ -n "$key" && -n "$value" ]]; then
  33.                 LAST_RESTART_TIMES["$key"]="$value"
  34.         fi
  35. done < $LRT_FILE
  36.  
  37. while IFS="=" read -r key value; do
  38.         if [[ -n "$key" && -n "$value" ]]; then
  39.                 LOCKED_OUT["$key"]="$value"
  40.         fi
  41. done < $LO_FILE
  42.  
  43.  
  44. #
  45. # Get current sf scan/monitor status
  46. #
  47.  
  48. SCANS=`sf scan list --running`;
  49.  
  50. #
  51. # See which scans have failed
  52. #
  53.  
  54. for FS in "${!FILESYSTEMS[@]}"; do
  55.         if [[ "$SCANS" != *"$FS"* ]]; then
  56.                 LR="${LAST_RESTART_TIMES["$FS"]}"
  57.                 CURTIME=`date +%s`
  58.                 LOCK="${LOCKED_OUT["$FS"]}"
  59.                 echo "Scan $FS is not listed"
  60.                 EMAIL="${EMAIL}""Scan $FS is not listed""\n"
  61.                 LOG="${LOG}""Scan $FS is not listed. "
  62.  
  63.                 if [[ "$LOCK" == "0" ]]; then
  64.                         echo "  Current time is:              $CURTIME"
  65.                         EMAIL="${EMAIL}""  Current time is:              $CURTIME""\n"
  66.                         LOG="${LOG}""Current time: $CURTIME. "
  67.  
  68.                         echo "  Last scripted restart was at: $LR ($((CURTIME - LR)) seconds ago)"
  69.                         EMAIL="${EMAIL}""  Last scripted restart was at: $LR ($((CURTIME - LR)) seconds ago)""\n"
  70.                         LOG="${LOG}""Last autorestart was at $LR ($((CURTIME - LR)) seconds ago). "
  71.  
  72.                         if [[ $((CURTIME - LR)) -gt $LOCKOUT_INTERVAL ]]; then
  73.                                 echo "  Restarting $FS scan"
  74.                                 EMAIL="${EMAIL}""  Restarting $FS scan""\n"
  75.                                 LOG="${LOG}""Restarting $FS scan.""\n"
  76.                                 LAST_RESTART_TIMES["$FS"]="$CURTIME"
  77.                                 X=`sf volume monitor start $FS`
  78.                         else
  79.                                 echo "  Last restart was too recent; locking out restarts for $FS"
  80.                                 EMAIL="${EMAIL}""  Last restart was too recent; locking out restarts for $FS""\n"
  81.                                 LOG="${LOG}""Last restart was too recent; locking out restarts for $FS.""\n"
  82.                                 LOCKED_OUT["$FS"]="1"
  83.                         fi
  84.                 else
  85.                         echo "  Restarts for $FS are locked out"
  86.                         EMAIL="${EMAIL}""  Restarts for $FS are locked out""\n"
  87.                         LOG="${LOG}""  Restarts for $FS are locked out.""\n"
  88.                 fi
  89.         fi
  90. done
  91.  
  92.  
  93. #
  94. # Send/write logging outputs
  95. #
  96. if [[ ! -z "$EMAIL" ]]; then
  97.         echo -e $EMAIL | mail -s "check_sf cron output" <redacted>
  98. fi
  99.  
  100. echo -e $LOG >> $LOGGING_FILE
  101.  
  102.  
  103. #
  104. # Write state to filesystem
  105. #
  106.  
  107. `rm -f $LRT_FILE`
  108. `rm -f $LO_FILE`
  109.  
  110. for key in "${!LAST_RESTART_TIMES[@]}"; do
  111.         echo "$key=${LAST_RESTART_TIMES[$key]}" >> "$LRT_FILE"
  112. done
  113.  
  114. for key in "${!LOCKED_OUT[@]}"; do
  115.         echo "$key=${LOCKED_OUT[$key]}" >> "$LO_FILE"
  116. done
  117.  
Advertisement
Add Comment
Please, Sign In to add comment