Come appare il messaggio
OCP\Lock\LockedException: "files/9a3c1e7d/Dokumente/Bericht.docx" is locked, existing lock on file: exclusiveCause frequenti
- Il file locking usa il database invece di Redis e i lock restano dopo le interruzioni.
- Upload o sincronizzazione del client desktop interrotti; il processo PHP è stato chiuso per timeout.
- Il file è ancora aperto in Collabora o OnlyOffice.
- I job in background non girano (niente cron di sistema), quindi i lock scaduti non vengono puliti.
Verifica
- Quale backend di locking è configurato?
sudo -u www-data php /var/www/nextcloud/occ config:system:get memcache.locking - Verifica che Redis risponda
redis-cli ping - Conta i lock nel database (con locking su DB)
mysql -u nextcloud -p nextcloud -e 'SELECT COUNT(*) FROM oc_file_locks WHERE `lock` <> 0;' - Controlla la modalità dei job in background
sudo -u www-data php /var/www/nextcloud/occ config:app:get core backgroundjobs_mode
Soluzione
- Usa Redis per il locking:
'memcache.locking' => '\OC\Memcache\Redis'inconfig.php. - Passa i job in background al cron di sistema:
*/5 * * * * php -f /var/www/nextcloud/cron.phpnel crontab di www-data. - Togli i lock orfani dal DB: maintenance mode on,
DELETE FROM oc_file_locks WHERE 1;, maintenance mode off. - Con Redis i lock scadono tramite TTL; svuota il database Redis solo in emergenza e solo se lo usa esclusivamente Nextcloud.
- Se serve, lancia poi
occ files:scan --path="utente/files/cartella"sul percorso interessato.
Domande frequenti
Posso semplicemente disattivare il file locking?
Tecnicamente sì (filelocking.enabled a false), ma rischi file corrotti con accessi concorrenti. Meglio usare Redis.
Perché il client desktop ci sbatte sempre contro?
Di solito file grandi e timeout PHP corti: l'upload si interrompe e il lock resta. Alza i timeout e usa il locking su Redis.