checkMount.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/bin/bash
  2. # Config
  3. TIMEOUT=20
  4. CACHE_BASE="/var/cache/davfs2"
  5. DARWIN_APP="/Applications/Zach/Internet/OpenDrive.app"
  6. if [ -z "${VIDEO_DIR}" ]; then
  7. VIDEO_DIR="${HOME}/bin/video"
  8. fi
  9. if [ -z "${BASE_REMOTE}" ]; then
  10. BASE_REMOTE="`"${VIDEO_DIR}/backup/remoteDir.sh"`"
  11. fi
  12. # State
  13. FAILED=0
  14. # Command-line options
  15. WC="${BASE_REMOTE}/.live_check"
  16. if [ -n "${1}" ]; then
  17. WC="${BASE_REMOTE}/${1}/.write_check"
  18. fi
  19. # Stat check
  20. if [ $FAILED -lt 1 ]; then
  21. if ! timeout "${TIMEOUT}" ls "${BASE_REMOTE}" >/dev/null 2>&1; then
  22. FAILED=1
  23. fi
  24. fi
  25. # Write check
  26. if [ $FAILED -lt 1 ]; then
  27. timeout "${TIMEOUT}" touch "${WC}" >/dev/null 2>&1
  28. if [ ! -e "${WC}" ]; then
  29. FAILED=1
  30. fi
  31. timeout "${TIMEOUT}" rm -f "${WC}" >/dev/null 2>&1
  32. if [ $FAILED -lt 1 ] && [ -e "${WC}" ]; then
  33. FAILED=1
  34. fi
  35. fi
  36. # Reset if needed
  37. if [ $FAILED -gt 0 ]; then
  38. echo 'Resetting OpenDrive mount' 1>&2
  39. if uname | grep -qi Darwin; then
  40. PID=`ps ax -o pid=,command= | grep -v grep | grep '/Contents/MacOS/OpenDrive' | awk '{print $1}'`
  41. if [ -n "${PID}" ]; then
  42. ${SUDO} kill -9 $PID
  43. fi
  44. open "${DARWIN_APP}"
  45. else
  46. # Determine if we need sudo
  47. SUOD=""
  48. if [ $UID -gt 0 ]; then
  49. SUDO="sudo"
  50. fi
  51. # Kill the daemon, if running
  52. PID=`ps ax -o pid=,command= | grep -v grep | grep 'mount.davfs' | grep "${BASE_REMOTE}" | awk '{print $1}'`
  53. if [ -n "${PID}" ]; then
  54. ${SUDO} kill $PID
  55. sleep 5
  56. ${SUDO} kill -9 $PID >/dev/null 2>&1
  57. fi
  58. # Umount, if mounted
  59. if mount | awk '$3 == "'"${BASE_REMOTE}"'" { print $3 }' | grep -q "${BASE_REMOTE}"; then
  60. ${SUDO} umount "${BASE_REMOTE}"
  61. fi
  62. # Drop the PID file
  63. DASH_NAME="`echo "${BASE_REMOTE}" | cut -d '/' -f 2- | sed 's%/%-%g'`"
  64. ${SUDO} rm -f "/var/run/mount.davfs/${DASH_NAME}.pid"
  65. # Clear the cache
  66. CACHE_DIR="`${SUDO} find "${CACHE_BASE}" -maxdepth 1 -type d -name "*+${DASH_NAME}+${USER}"`"
  67. if [ `echo "${CACHE_DIR}" | wc -l` -eq 1 ] && echo "${CACHE_DIR}" | grep -q "^${CACHE_BASE}"; then
  68. ${SUDO} rm -rf "${CACHE_DIR}" >/dev/null 2>&1
  69. fi
  70. # Re-mount
  71. ${SUDO} mount "${BASE_REMOTE}"
  72. fi
  73. exit 1
  74. fi
  75. # Exit cleanly
  76. exit 0