What the message looks like
OCP\Lock\LockedException: "files/9a3c1e7d/Dokumente/Bericht.docx" is locked, existing lock on file: exclusiveCommon causes
- File locking uses the database instead of Redis, and locks stay behind after aborts.
- An aborted upload or desktop client sync; the PHP process was killed by a timeout.
- The file is still open in Collabora or OnlyOffice.
- Background jobs do not run (no system cron), so expired locks are not cleaned up.
Check
- Which locking backend is configured?
sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.locking - Check that Redis is reachable
redis-cli ping - Count locks in the database (with DB locking)
mysql -u nextcloud -p nextcloud -e 'SELECT COUNT(*) FROM oc_file_locks WHERE `lock` <> 0;' - Check the background job mode
sudo -u www-data php /var/www/nextcloud/occ config:app:get core backgroundjobs_mode
Fix
- Use Redis for locking:
'memcache.locking' => '\OC\Memcache\Redis'inconfig.php. - Switch background jobs to system cron:
*/5 * * * * php -f /var/www/nextcloud/cron.phpin www-data's crontab. - Clear stale DB locks: maintenance mode on,
DELETE FROM oc_file_locks WHERE 1;, maintenance mode off. - With Redis, locks expire via TTL; only flush the Redis database in an emergency, and only if Nextcloud is its sole user.
- If needed, run
occ files:scan --path="user/files/folder"for the affected path afterwards.
FAQ
Can I just disable file locking?
Technically yes (filelocking.enabled set to false), but you risk corrupted files on concurrent access. Use Redis instead.
Why does the desktop client keep hitting this?
Usually large files plus short PHP timeouts: the upload aborts and the lock stays. Raise the timeouts and use Redis locking.