Automatically scan changes for Nextcloud external storage.
Nextcloud uses a database to keep track of the files it stores. However, if a file is externally modified, the database won't know. It seems that the only possible way to inform the database is to run occ files:scan, which can be time- and resource-consuming if the whole storage is periodically scanned.
This Python script uses inotifywait to watch for changes and issues scan requests for the modified part on demand.
- Linux with systemd
- Nextcloud installation
phpandinotifywaitinPATH/usr/bin/python
The script should work if modified for other environments.
- Download nextcloud-inotifyscan as
/usr/local/bin/nextcloud-inotifyscan sudo chmod +x /usr/local/bin/nextcloud-inotifyscan- Download nextcloud-inotifyscan.service as
/etc/systemd/system/nextcloud-inotifyscan.service - Modify
NEXTCLOUD_HOMEandUSER_NAMEin/etc/systemd/system/nextcloud-inotifyscan.service sudo systemctl enable --now nextcloud-inotifyscan
- This script is tested on Ubuntu 16.04 LTS and Ubuntu 18.04 LTS
- To install
inotifywaiton Ubuntu, usesudo apt install inotify-tools
- To install
- This script ignores hidden files (
inotifywait --exclude '/\.'), as Nextcloud does - A similar project implemented in
php, files_inotify,doesn't seem to work at this point in timeexists but I'm not sure if it works - Watching ~2000 directories with ~30000 files,
inotifywaitconsumes less than 4MB memory (RES+SHR) - To watch more than 8192 directories,
fs.inotify.max_user_watchesmay need to be increased viasysctl - Nextcloud 14 or a later version is required for the
--shallowflag