Blame
| eb4d88 | Tebby Dog | 2025-07-06 21:43:46 | 1 | # Mount-Point-Service-Sync |
| 2 | ||||
| 372780 | Tebby Dog | 2025-07-06 22:32:27 | 3 | Skip the fairy-tale, just give me the code already --> [Click Here](https://teb.codes/2-Code/Bash/Mount-Point-Service-Sync#setup) |
| f76050 | Tebby Dog | 2025-07-06 22:32:12 | 4 | |
| 32ed51 | Tebby Dog | 2025-07-06 21:44:47 | 5 | ## Intro |
| 6 | ---------------- |
|||
| 7 | ||||
| eb4d88 | Tebby Dog | 2025-07-06 21:43:46 | 8 | Plex kept shitting the bed every time the SMB share randomly dropped offline. After getting sick of jumping in to fix it manually over and over, I hacked together a script that shuts down the Plex service when the share bails, tries to remount the damn thing, and fires Plex back up once the share is stable again. |
| 9 | ||||
| 10 | # MPSS (Mount Point Service Sync) |
|||
| 11 | ===================================== |
|||
| 12 | ||||
| 13 | MPSS dynamically controls start/stop of services (plexmediaserver, tdarr_node, Tdarr_Uptime, emby-server) based on presence or absence of "MOUNT_POINT_ALIVE" file on a network share. It logs actions to /var/log/mpss.log and trims the log to 200 lines. |
|||
| 14 | ||||
| 15 | ||||
| 16 | ### Basic Concept |
|||
| 17 | --------------- |
|||
| 18 | ||||
| 19 | 1. Crontab that runs this script regularly |
|||
| 20 | 2. Script checks for a file on the network share |
|||
| 21 | * If it does, ensure the service is running |
|||
| 22 | * If it does not, ensure the service is stopped |
|||
| 23 | ||||
| 24 | ## Setup |
|||
| 25 | -------- |
|||
| 26 | ||||
| 27 | ### Step 1: Download the Script |
|||
| 28 | ------------------------------ |
|||
| 29 | ||||
| 30 | Download the script from this git repository: |
|||
| 31 | ||||
| 32 | ```bash |
|||
| 33 | mkdir /opt/mpss |
|||
| 34 | git clone https://github.com/tebwritescode/mpss.git |
|||
| 35 | cp ./mpss/mpss.sh /opt/mpss/mpss.sh |
|||
| 36 | ``` |
|||
| 37 | ||||
| edb864 | Tebby Dog | 2025-07-06 21:45:55 | 38 | Copy-Pasta is also an option |
| 39 | ||||
| 40 | ```bash |
|||
| 41 | #!/bin/bash |
|||
| 42 | #MPSS - Mount Point Service Sync |
|||
| 43 | # Disables/Enables plexmediaserver, tdarr_node service based on the existance of |
|||
| 44 | # a file on the network share |
|||
| 45 | ||||
| 46 | FILE="/path/to/mount/MOUNT_POINT_ALIVE" #The location of the file on the share |
|||
| 47 | SERVICE="service" #Service that can be started/stopped with systemctl |
|||
| 48 | LOG_FILE="/var/log/mpss.log" #Where to save the log |
|||
| 49 | MAX_LINES=200 #How many lines of logs to keep in the log file |
|||
| 50 | ||||
| 51 | # Get the current number of lines in the log file |
|||
| 52 | CURRENT_LINES=$(wc -l < "$LOG_FILE") |
|||
| 53 | ||||
| 54 | # If there are more than MAX_LINES, truncate the file to keep only the last MAX_LINES lines |
|||
| 55 | if [ $CURRENT_LINES -gt $MAX_LINES ]; then |
|||
| 56 | echo "$(date) INFO: MPSS: Trimming log file" >> /var/log/mpss.log 2>&1 |
|||
| 57 | tail -n $MAX_LINES $LOG_FILE >> mpss-temp.log |
|||
| 58 | mv mpss-temp.log "$LOG_FILE" |
|||
| 59 | fi |
|||
| 60 | ||||
| 61 | echo "$(date) INFO: MPSS: Attempting to mount all" >> /var/log/mpss.log 2>&1 |
|||
| 62 | sudo mount -a >> /var/log/mpss.log 2>&1 |
|||
| 63 | ||||
| 64 | if [ -e "${FILE}" ]; then |
|||
| 65 | # Start the service if the file exists |
|||
| 66 | echo "$(date) INFO: MPSS: ${FILE} found! Checking if ${SERVICE} is active and if it isn't starting it." >> /var/log/mpss.log 2>&1 |
|||
| 67 | sudo systemctl is-active --quiet $SERVICE >> /var/log/mpss.log 2>&1 || systemctl start $SERVICE >> /var/log/mpss.log 2>&1 |
|||
| 68 | else |
|||
| 69 | # Stop the service if the file does not exist |
|||
| 70 | echo "$(date) INFO: MPSS: ${FILE} not found! Checking if ${SERVICE} is active and if it is stopping it." >> /var/log/mpss.log 2>&1 |
|||
| 71 | sudo systemctl is-active --quiet $SERVICE >> /var/log/mpss.log 2>&1 && systemctl stop $SERVICE >> /var/log/mpss.log 2>&1 |
|||
| 72 | fi |
|||
| 73 | ``` |
|||
| 74 | ||||
| eb4d88 | Tebby Dog | 2025-07-06 21:43:46 | 75 | ### Step 2: Customize the Script |
| 76 | ------------------------------- |
|||
| 77 | ||||
| 78 | Customize the script by modifying the variables at the top of the file: |
|||
| 79 | ||||
| 80 | ```bash |
|||
| 81 | nano /opt/mpss/mpss.sh |
|||
| 82 | ``` |
|||
| 83 | ||||
| 84 | Modify `FILE`, `SERVICE`, `LOG_FILE`, and `MAX_LINES` to match your setup. |
|||
| 85 | ||||
| 86 | Example: |
|||
| 87 | ```bash |
|||
| 88 | FILE="/path/to/mount/MOUNT_POINT_ALIVE" #The location of the file on the share |
|||
| 89 | SERVICE="plexmediaserver" #Service that can be started/stopped with systemctl |
|||
| 90 | LOG_FILE="/var/log/mpss.log" #Where to save the log |
|||
| 91 | MAX_LINES=200 #How many lines of logs to keep in the log file |
|||
| 92 | ``` |
|||
| 93 | ||||
| 94 | Save your changes with <kbd>ctrl</kbd> + <kbd>x</kbd>, then <kbd>y</kbd>, then <kbd>return</kbd>. |
|||
| 95 | ||||
| 96 | ### Step 3: Create the Log File |
|||
| 97 | --------------------------- |
|||
| 98 | ||||
| 99 | Create the log file: |
|||
| 100 | ||||
| 101 | ```bash |
|||
| 102 | touch /var/log/mpss.log |
|||
| 103 | ``` |
|||
| 104 | ||||
| 105 | ### Step 4: Create the Check File |
|||
| 106 | ------------------------------ |
|||
| 107 | ||||
| 108 | Create the check file on the network share: |
|||
| 109 | ||||
| 110 | ```bash |
|||
| 111 | touch /path/to/mount/MOUNT_POINT_ALIVE |
|||
| 112 | ``` |
|||
| 113 | ||||
| 114 | ### Step 5: Make the Script Executable |
|||
| 115 | ------------------------------------ |
|||
| 116 | ||||
| 117 | Make the script executable: |
|||
| 118 | ||||
| 119 | ```bash |
|||
| 120 | chmod +x /opt/mpss/mpss.sh |
|||
| 121 | ``` |
|||
| 122 | ||||
| 123 | ### Step 6: Schedule the Script with Crontab |
|||
| 124 | ----------------------------------------- |
|||
| 125 | ||||
| 126 | Schedule the script to run regularly using crontab. Add the following line to your crontab file (use `crontab -e` to edit): |
|||
| 127 | ||||
| 128 | ```bash |
|||
| 129 | */1 * * * * /opt/mpss/mpss.sh |
|||
| 130 | ``` |
|||
| 131 | ||||
| 132 | Note: Be aware that some versions of cron do not support all times you can create on crontab.guru, you will get an error when saving the file. |
|||
| 133 | ||||
| 134 | That's it! Your MPSS script should now be set up to automatically start/stop services based on the presence or absence of the `MOUNT_POINT_ALIVE` file on your network share. |