Skip to main content


Preview

Plex NFS Watchdog

A utility to trigger Plex partial-scans on NFS configurations, on which inotify is not supported



Table of Contents
  1. 📖 About The Project
  2. ⚙️ Getting Started
  3. 💫 Contributing
  4. 🤝 Support
  5. ⚠️ License
  6. 🛠️ Built With

📖 About The Project

Inotify is a Linux kernel subsystem that allows monitoring changes to files and directories in real-time. It is commonly used by applications to watch for changes in files or directories and respond accordingly.

Plex makes use of inotify to perform partial scans when a file is added or removed from a directory. This allows Plex to update its library without having to perform a full scan.

Running Plex Media Server with the library located on Network File System (NFS) mounted directories will not trigger such partial scans because inotify doesn't work on NFS. When a file is changed on an NFS mount, it doesn't trigger an inotify event on the client side.

Plex NFS Watchdog is a utility that can be installed on the machine that produces inotify to monitors directories for changes and triggers a partial scan on the Plex Media Server instance installed in a different machine when a change is detected by invoking the Plex API.

(back to top)

⚙️ Getting Started

To use Plex NFS Watchdog you must ensure that on all machines involved the Plex's Library sections use the same folder name. The folder path can be different on each machine, but the folder name must be the same.

This is important because the utility will use the folder name to trigger the partial scan.

For example, if you have a library section called "Movies" and the folder name is "Movies", the utility will trigger a partial scan on the "Movies" library section when a change is detected in the "Movies" folder.

(back to top)

Prerequisites

Obtain the Plex Authentication Token for your Plex Media Server instance. You can find instructions on how to do this here.

(back to top)

Installation

You can install this tool as a Python Module using pip or executing the script directly.

  • If you want to install the tool as a Python Module:
    • Install the module using pip: pip install plex-nfs-watchdog
    • You can run the tool using: plex-nfs-watchdog
  • If you want to use the script directly:
    • Clone the repository anywhere on your pc:

      git clone https://github.com/LightDestory/PlexNFSWatchdog

    • Install the requirements using pip (create a venv if you want):

      pip install -r requirements.txt

    • Run directly from source:

      python ./src/plex_nfs_watchdog/plex_nfs_watchdog.py

(back to top)

Docker Support

You can also run this tool using Docker Compose.

  • Clone the repository:

    • Download the project by running:
      git clone https://github.com/LightDestory/PlexNFSWatchdog
      cd PlexNFSWatchdog
      
  • Create a .env file in the root of the project:

    • You can use the provided .env.example file as a reference and rename/copy it to .env.
    • Define the necessary environment variables such as your Plex server address, token, paths to watch, scan interval, and event listeners. See Usage for more details on what to set these variables to.
  • Modify compose.yml to match your setup:

    • Ensure the volume paths correctly map to your actual media directories, the same ones you've specified to be watched in the .env file.
  • Build and start the container:

    • Run the following command to start the service in detached mode:

      docker compose up -d --build
      
    • Check logs to monitor the process:

      docker logs -f plexnfswatchdog
      
    • Restart the container if needed:

      docker compose restart plexnfswatchdog
      
    • Stop and remove the container:

      docker compose down
      

(back to top)

Usage

This utility requires the following arguments to work:

Argument Role
--scan | -s Manually triggers a partial-scan on the given paths
--daemon | -d Starts a watchdog daemon to automatically triggers a partial-scan on the given paths
Requires: --interval and --listeners
--paths | -p [PATHS...] A list of folder paths
--host | -H HOST The host of the Plex server
Default: http://localhost:32400
--token | -t TOKEN The token of the Plex server
--interval | -i INTERVAL [OPTIONAL] The interval in seconds to wait between partial-scans. Defaults to 60
--listeners | -l [LISTENERS...] [OPTIONAL] The event type to watch: move, modify, create, delete, io_close, io_open
--allow-folder Allow folder events to trigger the daemon mode. Defaults to False
--always-overwrite-config Always overwrite the config file with the provided host and token if they are different. Defaults to False
  • Manual Scan example:
    plex-nfs-watchdog --scan --paths /path/to/library_section1/section_chield1 --host http://localhost:32400 --token YOUR_TOKEN
  • Daemon Scan example:
    plex-nfs-watchdog --daemon --paths /path/to/library_section1 --host http://localhost:32400 --token YOUR_TOKEN --interval 150 --listeners move modify create delete

(back to top)

Notes

After the first successful run, a cache config file containing Plex's host and token will be created in the user's home directory. This file will be used for subsequent runs, so you don't have to provide them every time.

(back to top)

💫 Contributing

If you are interested in contributing, please refer to Contributing Guidelines for more information and take a look at open issues. Ask any questions you may have and you will be provided guidance on how to get started.

Thank you for considering contributing.

(back to top)

🤝 Support

If you find value in my work, please consider making a donation to help me create, and improve my projects.

Your donation will go a long way in helping me continue to create free software that can benefit people around the world.

Buy Me a Hot Chocolate at ko-fi.com

(back to top)

⚠️ License

The content of this repository is distributed under the GNU GPL-3.0 License. See LICENSE for more information.

(back to top)

🛠️ Built With

(back to top)

Release files for plex-nfs-watchdog 0.0.16

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plex-nfs-watchdog 0.0.16
File Size Uploaded
plex_nfs_watchdog-0.0.16.tar.gz 26.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plex-nfs-watchdog 0.0.16
File Interpreter ABI Platform
plex_nfs_watchdog-0.0.16-py3-none-any.whl Python 3 none any Details

Total release size: 51.0 kB

Release files / plex_nfs_watchdog-0.0.16.tar.gz

Download URL plex_nfs_watchdog-0.0.16.tar.gz
Size 26.0 kB
Tags Source
SHA-256 checksum
How to use checksums
15b428ef9ceed10428d32d3be155e5f5abca8e3d3d3e6fb0ddbaebb851039331
BLAKE2b-256 checksum
How to use checksums
bad47e1c31347f7eba8693c5792f2346b8192be20ef755ae59f8c91e2dff58f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 3, 2025.

Transparency log

Release files / plex_nfs_watchdog-0.0.16-py3-none-any.whl

Download URL plex_nfs_watchdog-0.0.16-py3-none-any.whl
Size 25.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1a3e39b9fafdbc77966fddf692c183bfd91a07822f4aea4388eae1a02971fc05
BLAKE2b-256 checksum
How to use checksums
0c98c3edc0b1994d6ba28a8c2fef70b4a4d1c607d97b63d8ddc80d4e2e0e60b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 3, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.16 This release

2 release files

0.0.10

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page