From e1cf8e6bc188348ebcc8deb2d565c8fc37b7c4c0 Mon Sep 17 00:00:00 2001 From: Adam Monsen Date: Sat, 21 May 2022 13:33:52 -0700 Subject: [PATCH] use flock automatic lock for upgrade fix #1756 fix #1903 Signed-off-by: Adam Monsen --- docker-entrypoint.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 3175361f..ff7210d0 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -124,15 +124,15 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP rsync_options="-rlD" fi + # Prevent multiple images syncing simultaneously: # If another process is syncing the html folder, wait for - # it to be done, then escape initalization. - # You need to define the NEXTCLOUD_INIT_LOCK environment variable - lock=/var/www/html/nextcloud-init-sync.lock + # it to be done, then escape initalization count=0 limit=10 - if [ -f "$lock" ] && [ -n "${NEXTCLOUD_INIT_LOCK+x}" ]; then - until [ ! -f "$lock" ] || [ "$count" -gt "$limit" ] + ( + if ! flock -n 9; then + until flock -n 9 || [ "$count" -gt "$limit" ] do count=$((count+1)) wait=$((count*10)) @@ -145,8 +145,6 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP fi echo "The other process is done, assuming complete initialization" else - # Prevent multiple images syncing simultaneously - touch $lock rsync $rsync_options --delete --exclude-from=/upgrade.exclude /usr/src/nextcloud/ /var/www/html/ for dir in config data custom_apps themes; do @@ -234,10 +232,9 @@ if expr "$1" : "apache" 1>/dev/null || [ "$1" = "php-fpm" ] || [ "${NEXTCLOUD_UP fi - # Initialization done, reset lock - rm $lock echo "Initializing finished" fi + ) 9> /var/lock/nextcloud-init-sync.lock fi # Update htaccess after init if requested