put the mounts in one script and start the dockers only when the 2nd mount is successful!
Edit: hardcode the dockers you need to stop in the relevant section for the first mount if it fails
Here's a snippet from my combined mount script that mounts about 7 team drives in sequence, but only the last mount creates the mergerfs mount. The key line is the hardcoded docker stop section that stops the dockers if any of the mounts fail:
################################################################
###################### mount uhd ##############################
################################################################
# REQUIRED SETTINGS
RcloneRemoteName="tdrive_uhd_vfs"
RcloneMountShare="/mnt/user/mount_rclone"
LocalFilesShare="ignore"
MergerfsMountShare="ignore"
DockerStart="swag"
MountFolders=\{"uhd/tv_adults_gd,uhd/tv_kids_gd,uhd/documentaries/kids,uhd/documentaries/adults"\}
# OPTIONAL SETTINGS
# Add extra paths to mergerfs mount in addition to LocalFilesShare
LocalFilesShare2="ignore"
LocalFilesShare3="ignore"
LocalFilesShare4="ignore"
# Add extra commands or filters
Command1=""
Command2=""
Command3=""
Command4=""
Command5=""
Command6=""
Command7=""
Command8=""
CreateBindMount="N"
RCloneMountIP="192.168.1.76"
NetworkAdapter="eth0"
VirtualIPNumber="6"
####### END SETTINGS #######
# fusermount -uz /mnt/user/mount_rclone/$RcloneRemoteName
####### Preparing mount location variables #######
LocalFilesLocation="$LocalFilesShare/$RcloneRemoteName"
RcloneMountLocation="$RcloneMountShare/$RcloneRemoteName"
MergerFSMountLocation="$MergerfsMountShare/$RcloneRemoteName"
####### create directories for rclone mount and mergerfs mounts #######
mkdir -p /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName #for script files
mkdir -p /mnt/user/mount_rclone/cache/$RcloneRemoteName #for cache files
if [[ $LocalFilesShare == 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Not creating local folders as requested."
else
echo "$(date "+%d.%m.%Y %T") INFO: Creating local folders."
eval mkdir -p $LocalFilesLocation/"$MountFolders"
fi
mkdir -p $RcloneMountLocation
mkdir -p $MergerFSMountLocation
####### Check if script is already running #######
echo "$(date "+%d.%m.%Y %T") INFO: *** Starting mount of remote ${RcloneRemoteName}"
echo "$(date "+%d.%m.%Y %T") INFO: Checking if this script is already running."
if [[ -f "/mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Exiting script as already running."
exit
else
echo "$(date "+%d.%m.%Y %T") INFO: Script not running - proceeding."
touch /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running
fi
####### Create Rclone Mount #######
# Check If Rclone Mount Already Created
if [[ -f "$RcloneMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Success ${RcloneRemoteName} remote is already mounted."
else
echo "$(date "+%d.%m.%Y %T") INFO: Mount not running. Will now mount ${RcloneRemoteName} remote."
# Creating mountcheck file in case it doesn't already exist
echo "$(date "+%d.%m.%Y %T") INFO: Recreating mountcheck file for ${RcloneRemoteName} remote."
touch mountcheck
rclone copy mountcheck $RcloneRemoteName: -vv --no-traverse
# Check bind option
if [[ $CreateBindMount == 'Y' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: *** Checking if IP address ${RCloneMountIP} already created for remote ${RcloneRemoteName}"
ping -q -c2 $RCloneMountIP > /dev/null # -q quiet, -c number of pings to perform
if [ $? -eq 0 ]; then # ping returns exit status 0 if successful
echo "$(date "+%d.%m.%Y %T") INFO: *** IP address ${RCloneMountIP} already created for remote ${RcloneRemoteName}"
else
echo "$(date "+%d.%m.%Y %T") INFO: *** Creating IP address ${RCloneMountIP} for remote ${RcloneRemoteName}"
ip addr add $RCloneMountIP/24 dev $NetworkAdapter label $NetworkAdapter:$VirtualIPNumber
fi
echo "$(date "+%d.%m.%Y %T") INFO: *** Created bind mount ${RCloneMountIP} for remote ${RcloneRemoteName}"
else
RCloneMountIP=""
echo "$(date "+%d.%m.%Y %T") INFO: *** Creating mount for remote ${RcloneRemoteName}"
fi
# create rclone mount
rclone mount \
$Command1 $Command2 $Command3 $Command4 $Command5 $Command6 $Command7 $Command8 \
--allow-other \
--umask 000 \
--dir-cache-time 5000h \
--attr-timeout 5000h \
--log-level INFO \
--poll-interval 10s \
--cache-dir=/mnt/user/mount_rclone/cache/$RcloneRemoteName \
--drive-pacer-min-sleep 10ms \
--drive-pacer-burst 1000 \
--vfs-cache-mode full \
--vfs-read-chunk-size 256M \
--vfs-cache-max-size 400G \
--vfs-cache-max-age 96h \
--vfs-read-ahead 1G \
--bind=$RCloneMountIP \
$RcloneRemoteName: $RcloneMountLocation &
# Check if Mount Successful
echo "$(date "+%d.%m.%Y %T") INFO: sleeping for 5 seconds"
# slight pause to give mount time to finalise
sleep 10
echo "$(date "+%d.%m.%Y %T") INFO: continuing..."
if [[ -f "$RcloneMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Successful mount of ${RcloneRemoteName} mount."
else
echo "$(date "+%d.%m.%Y %T") CRITICAL: ${RcloneRemoteName} mount failed - please check for problems."
docker stop qbittorrentvpn readarr plex radarr_new radarr-uhd sonarr sonarr_new sonarr-uhd
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
####### Start MergerFS Mount #######
if [[ $MergerfsMountShare == 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Not creating mergerfs mount as requested."
else
if [[ -f "$MergerFSMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Check successful, ${RcloneRemoteName} mergerfs mount in place."
else
# check if mergerfs already installed
if [[ -f "/bin/mergerfs" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs already installed, proceeding to create mergerfs mount"
else
# Build mergerfs binary
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs not installed - installing now."
mkdir -p /mnt/user/appdata/other/rclone/mergerfs
docker run -v /mnt/user/appdata/other/rclone/mergerfs:/build --rm trapexit/mergerfs-static-build
mv /mnt/user/appdata/other/rclone/mergerfs/mergerfs /bin
# check if mergerfs install successful
echo "$(date "+%d.%m.%Y %T") INFO: *sleeping for 5 seconds"
sleep 10
if [[ -f "/bin/mergerfs" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs installed successfully, proceeding to create mergerfs mount."
else
echo "$(date "+%d.%m.%Y %T") ERROR: Mergerfs not installed successfully. Please check for errors. Exiting."
docker stop qbittorrentvpn readarr plex radarr_new radarr-uhd sonarr sonarr_new sonarr-uhd
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
# Create mergerfs mount
echo "$(date "+%d.%m.%Y %T") INFO: Creating ${RcloneRemoteName} mergerfs mount."
# Extra Mergerfs folders
if [[ $LocalFilesShare2 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare2} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare2=":$LocalFilesShare2"
else
LocalFilesShare2=""
fi
if [[ $LocalFilesShare3 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare3} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare3=":$LocalFilesShare3"
else
LocalFilesShare3=""
fi
if [[ $LocalFilesShare4 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare4} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare4=":$LocalFilesShare4"
else
LocalFilesShare4=""
fi
# mergerfs mount command
mergerfs $LocalFilesLocation:$RcloneMountLocation$LocalFilesShare2$LocalFilesShare3$LocalFilesShare4 $MergerFSMountLocation -o rw,async_read=false,use_ino,allow_other,func.getattr=newest,category.action=all,category.create=ff,cache.files=partial,dropcacheonclose=true
# check if mergerfs mount successful
echo "$(date "+%d.%m.%Y %T") INFO: Checking if ${RcloneRemoteName} mergerfs mount created."
if [[ -f "$MergerFSMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Check successful, ${RcloneRemoteName} mergerfs mount created."
else
echo "$(date "+%d.%m.%Y %T") CRITICAL: ${RcloneRemoteName} mergerfs mount failed."
docker stop qbittorrentvpn readarr plex radarr_new radarr-uhd sonarr sonarr_new sonarr-uhd
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
fi
####### Starting Dockers That Need Mergerfs Mount To Work Properly #######
if [[ -f "/tmp/ca.backup2/tempFiles/backupInProgress" ]] || [[ -f "/tmp/ca.backup2/tempFiles/restoreInProgress" ]] ; then
echo "$(date "+%d.%m.%Y %T") INFO: Appdata Backup plugin running - not starting dockers."
else
echo "$(date "+%d.%m.%Y %T") INFO: Starting dockers."
docker start $DockerStart
fi
rm /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running
echo "$(date "+%d.%m.%Y %T") INFO: ${RcloneRemoteName} Script complete"
################################################################
###################### mount tdrive ########################
################################################################
# # fusermount -uz /mnt/user/mount_rclone/tdrive_vfs
# # fusermount -uz /mnt/user/mount_mergerfs/tdrive_vfs
# REQUIRED SETTINGS
RcloneRemoteName="tdrive_vfs"
RcloneMountShare="/mnt/user/mount_rclone"
LocalFilesShare="/mnt/user/local"
MergerfsMountShare="/mnt/user/mount_mergerfs"
DockerStart="qbittorrentvpn readarr plex radarr_new radarr-uhd sonarr sonarr_new sonarr-uhd"
MountFolders=\{"anime/movies,downloads/complete,documentaries/kids,documentaries/adults,movies_adults_gd,movies_kids,tv_adults,uhd/tv_adults_gd,uhd/tv_kids_gd,uhd/documentaries/kids,uhd/documentaries/adults"\}
# OPTIONAL SETTINGS
# Add extra paths to mergerfs mount in addition to LocalFilesShare
LocalFilesShare2="/mnt/user/mount_rclone/gdrive_media_vfs" # without trailing slash e.g. /mnt/user/other__remote_mount/or_other_local_folder. Enter 'ignore' to disable
LocalFilesShare3="/mnt/user/mount_rclone/tdrive_uhd_vfs"
LocalFilesShare4="/mnt/user/mount_rclone/tdrive_tv_adults_vfs"
LocalFilesShare5="/mnt/user/mount_rclone/tdrive_tv_kids_vfs"
LocalFilesShare6="/mnt/user/mount_rclone/tdrive_movies_adults_vfs"
# Add extra commands or filters
Command1=""
Command2=""
Command3=""
Command4=""
Command5=""
Command6=""
Command7=""
Command8=""
CreateBindMount="N"
RCloneMountIP="192.168.1.77"
NetworkAdapter="eth0"
VirtualIPNumber="7"
####### END SETTINGS #######
# fusermount -uz /mnt/user/mount_rclone/$RcloneRemoteName
####### Preparing mount location variables #######
LocalFilesLocation="$LocalFilesShare/$RcloneRemoteName"
RcloneMountLocation="$RcloneMountShare/$RcloneRemoteName"
MergerFSMountLocation="$MergerfsMountShare/$RcloneRemoteName"
####### create directories for rclone mount and mergerfs mounts #######
mkdir -p /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName #for script files
mkdir -p /mnt/user/mount_rclone/cache/$RcloneRemoteName #for cache files
if [[ $LocalFilesShare == 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Not creating local folders as requested."
else
echo "$(date "+%d.%m.%Y %T") INFO: Creating local folders."
eval mkdir -p $LocalFilesLocation/"$MountFolders"
fi
mkdir -p $RcloneMountLocation
mkdir -p $MergerFSMountLocation
####### Check if script is already running #######
echo "$(date "+%d.%m.%Y %T") INFO: *** Starting mount of remote ${RcloneRemoteName}"
echo "$(date "+%d.%m.%Y %T") INFO: Checking if this script is already running."
if [[ -f "/mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Exiting script as already running."
exit
else
echo "$(date "+%d.%m.%Y %T") INFO: Script not running - proceeding."
touch /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running
fi
####### Create Rclone Mount #######
# Check If Rclone Mount Already Created
if [[ -f "$RcloneMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Success ${RcloneRemoteName} remote is already mounted."
else
echo "$(date "+%d.%m.%Y %T") INFO: Mount not running. Will now mount ${RcloneRemoteName} remote."
# Creating mountcheck file in case it doesn't already exist
echo "$(date "+%d.%m.%Y %T") INFO: Recreating mountcheck file for ${RcloneRemoteName} remote."
touch mountcheck
rclone copy mountcheck $RcloneRemoteName: -vv --no-traverse
# Check bind option
if [[ $CreateBindMount == 'Y' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: *** Checking if IP address ${RCloneMountIP} already created for remote ${RcloneRemoteName}"
ping -q -c2 $RCloneMountIP > /dev/null # -q quiet, -c number of pings to perform
if [ $? -eq 0 ]; then # ping returns exit status 0 if successful
echo "$(date "+%d.%m.%Y %T") INFO: *** IP address ${RCloneMountIP} already created for remote ${RcloneRemoteName}"
else
echo "$(date "+%d.%m.%Y %T") INFO: *** Creating IP address ${RCloneMountIP} for remote ${RcloneRemoteName}"
ip addr add $RCloneMountIP/24 dev $NetworkAdapter label $NetworkAdapter:$VirtualIPNumber
fi
echo "$(date "+%d.%m.%Y %T") INFO: *** Created bind mount ${RCloneMountIP} for remote ${RcloneRemoteName}"
else
RCloneMountIP=""
echo "$(date "+%d.%m.%Y %T") INFO: *** Creating mount for remote ${RcloneRemoteName}"
fi
# create rclone mount
rclone mount \
$Command1 $Command2 $Command3 $Command4 $Command5 $Command6 $Command7 $Command8 \
--allow-other \
--umask 000 \
--dir-cache-time 5000h \
--attr-timeout 5000h \
--log-level INFO \
--poll-interval 10s \
--cache-dir=/mnt/user/mount_rclone/cache/$RcloneRemoteName \
--drive-pacer-min-sleep 10ms \
--drive-pacer-burst 1000 \
--vfs-cache-mode full \
--vfs-cache-max-size 400G \
--vfs-cache-max-age 96h \
--vfs-read-ahead 1G \
--bind=$RCloneMountIP \
$RcloneRemoteName: $RcloneMountLocation &
# Check if Mount Successful
echo "$(date "+%d.%m.%Y %T") INFO: sleeping for 5 seconds"
# slight pause to give mount time to finalise
sleep 10
echo "$(date "+%d.%m.%Y %T") INFO: continuing..."
if [[ -f "$RcloneMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Successful mount of ${RcloneRemoteName} mount."
else
echo "$(date "+%d.%m.%Y %T") CRITICAL: ${RcloneRemoteName} mount failed - please check for problems."
docker stop $DockerStart
fusermount -uz /mnt/user/mount_mergerfs/tdrive_vfs
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
####### Start MergerFS Mount #######
if [[ $MergerfsMountShare == 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Not creating mergerfs mount as requested."
else
if [[ -f "$MergerFSMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Check successful, ${RcloneRemoteName} mergerfs mount in place."
else
# check if mergerfs already installed
if [[ -f "/bin/mergerfs" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs already installed, proceeding to create mergerfs mount"
else
# Build mergerfs binary
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs not installed - installing now."
mkdir -p /mnt/user/appdata/other/rclone/mergerfs
docker run -v /mnt/user/appdata/other/rclone/mergerfs:/build --rm trapexit/mergerfs-static-build
mv /mnt/user/appdata/other/rclone/mergerfs/mergerfs /bin
# check if mergerfs install successful
echo "$(date "+%d.%m.%Y %T") INFO: *sleeping for 5 seconds"
sleep 10
if [[ -f "/bin/mergerfs" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Mergerfs installed successfully, proceeding to create mergerfs mount."
else
echo "$(date "+%d.%m.%Y %T") ERROR: Mergerfs not installed successfully. Please check for errors. Exiting."
docker stop $DockerStart
fusermount -uz /mnt/user/mount_mergerfs/tdrive_vfs
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
# Create mergerfs mount
echo "$(date "+%d.%m.%Y %T") INFO: Creating ${RcloneRemoteName} mergerfs mount."
# Extra Mergerfs folders
if [[ $LocalFilesShare2 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare2} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare2=":$LocalFilesShare2"
else
LocalFilesShare2=""
fi
if [[ $LocalFilesShare3 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare3} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare3=":$LocalFilesShare3"
else
LocalFilesShare3=""
fi
if [[ $LocalFilesShare4 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare4} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare4=":$LocalFilesShare4"
else
LocalFilesShare4=""
fi
if [[ $LocalFilesShare5 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare5} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare5=":$LocalFilesShare5"
else
LocalFilesShare5=""
fi
if [[ $LocalFilesShare6 != 'ignore' ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Adding ${LocalFilesShare6} to ${RcloneRemoteName} mergerfs mount."
LocalFilesShare6=":$LocalFilesShare6"
else
LocalFilesShare6=""
fi
# mergerfs mount command
mergerfs $LocalFilesLocation:$RcloneMountLocation$LocalFilesShare2$LocalFilesShare3$LocalFilesShare4$LocalFilesShare5$LocalFilesShare6 $MergerFSMountLocation -o rw,async_read=false,use_ino,allow_other,func.getattr=newest,category.action=all,category.create=ff,cache.files=partial,dropcacheonclose=true
# check if mergerfs mount successful
echo "$(date "+%d.%m.%Y %T") INFO: Checking if ${RcloneRemoteName} mergerfs mount created."
if [[ -f "$MergerFSMountLocation/mountcheck" ]]; then
echo "$(date "+%d.%m.%Y %T") INFO: Check successful, ${RcloneRemoteName} mergerfs mount created."
else
echo "$(date "+%d.%m.%Y %T") CRITICAL: ${RcloneRemoteName} mergerfs mount failed."
docker stop $DockerStart
fusermount -uz /mnt/user/mount_mergerfs/tdrive_vfs
find /mnt/user/appdata/other/rclone/remotes -name mount_running* -delete
rm /mnt/user/appdata/other/scripts/running/fast_check
exit
fi
fi
fi
####### Starting Dockers That Need Mergerfs Mount To Work Properly #######
if [[ -f "/tmp/ca.backup2/tempFiles/backupInProgress" ]] || [[ -f "/tmp/ca.backup2/tempFiles/restoreInProgress" ]] ; then
echo "$(date "+%d.%m.%Y %T") INFO: Appdata Backup plugin running - not starting dockers."
else
echo "$(date "+%d.%m.%Y %T") INFO: Starting dockers."
docker start $DockerStart
fi
rm /mnt/user/appdata/other/rclone/remotes/$RcloneRemoteName/mount_running
echo "$(date "+%d.%m.%Y %T") INFO: ${RcloneRemoteName} Script complete"