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
php
andinotifywait
inPATH
/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_HOME
andUSER_NAME
in/etc/systemd/system/nextcloud-inotifyscan.service
sudo systemctl enable --now nextcloud-inotifyscan
- This script is tested on Ubuntu 16.04 LTS
- 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 time - Watching ~2000 directories with ~30000 files,
inotifywait
consumes less than 4MB memory (RES+SHR) - To watch more than 8192 directories,
fs.inotify.max_user_watches
may need to be increased viasysctl