PMSCheck.sh 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/bin/bash
  2. # Config
  3. CURL_TIMEOUT=2
  4. DATE_TIMEOUT=360
  5. PMS_URL="http://localhost:32400/"
  6. ADMIN_EMAIL="zach@kotlarek.com"
  7. # Command-line config
  8. LOOP=-1
  9. if [ "${1}" ]; then
  10. LOOP="${1}"
  11. fi
  12. # Run at least once, loop if requested
  13. while [ $LOOP -ne 0 ]; do
  14. # State tracking
  15. FAILED=""
  16. # Ask for the last update time from Plex
  17. UPDATE="`curl --silent --max-time "${CURL_TIMEOUT}" "${PMS_URL}" | \
  18. grep 'updatedAt=' | sed 's%^.*updatedAt="\([0-9]*\)".*$%\1%'`"
  19. # If Plex replied, check the update time
  20. if [ -n "${UPDATE}" ]; then
  21. DATE="`date '+%s'`"
  22. DIFF=$(( $DATE - $UPDATE ));
  23. if [ $DIFF -gt $DATE_TIMEOUT ]; then
  24. FAILED="Update timeout"
  25. fi
  26. else
  27. FAILED="HTTP timeout"
  28. fi
  29. # If Plex has failed kill it
  30. if [ -n "${FAILED}" ]; then
  31. ERR_MSG="PMS is non-responsive (${FAILED}). Killing..."
  32. killall 'Plex Media Server'
  33. if [ $LOOP -lt 1 ]; then
  34. echo "${ERR_MSG}" 1>&2
  35. exit 1
  36. elif [ -n "${ADMIN_EMAIL}" ]; then
  37. echo "${ERR_MSG}" | sendmail "${ADMIN_EMAIL}"
  38. fi
  39. fi
  40. # Sleep for the next loop or exit
  41. if [ $LOOP -gt 0 ]; then
  42. sleep $LOOP
  43. else
  44. exit 0
  45. fi
  46. done