Files
containers/rsync/docker-entrypoint.sh
2022-08-03 20:04:54 -04:00

109 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
################################################################################
# INIT
################################################################################
# Provide CRON_TASK_* via environment variable
> /etc/crontabs/root
for item in `env`; do
case "$item" in
CRON_TASK*)
ENVVAR=`echo $item | cut -d \= -f 1`
printenv $ENVVAR >> /etc/crontabs/root
echo "root" > /etc/crontabs/cron.update
;;
esac
done
if [ "$1" == "client" ]; then
exec /usr/sbin/crond -f
fi
if [ "$NOMAD_TASK_NAME" == "init" ]; then
echo "Starting RSYNC"
flock -x /locks/${NOMAD_GROUP_NAME}_rsync.lock rsync -avv --exclude=Backups --exclude='*.db*' --exclude='*.db' --exclude='*db-litestream' --exclude='generations' /configbackup/ /config/ --delete-before --delete-excluded
echo "Ensure no DBs"
rm -rf /config/*.db*
rm -rf /config/database.sqlite
if [[ -f /local/litestream.yml ]]; then
echo "LITESTREAM DETECTED"
echo "Starting DB Restore"
if /usr/local/bin/litestream restore -config /local/litestream.yml /config/${DB_NAME}; then
echo "Restore of ${DB_NAME} Succeeded: "
else
echo "Restore of ${DB_NAME} failed"
unset -v latest
if [ -d "/configbackup/Backups/scheduled" ]; then
for file in "/configbackup/Backups/scheduled"/*; do
[[ $file -nt $latest ]] && latest=$file
done
fi
if [ -d "/configbackup/Backups/manual" ]; then
for file in "/configbackup/Backups/manual"/*; do
[[ $file -nt $latest ]] && latest=$file
done
fi
if [ -z "$latest" ]; then
echo "No Backups found";
else
echo "Restoring $latest"
unzip -o $latest -d /config
fi
fi
else
echo "NO LITESTREAM DETECTED - trying to restore backup"
unset -v latest
if [ -d "/configbackup/Backups/scheduled" ]; then
for file in "/configbackup/Backups/scheduled"/*; do
[[ $file -nt $latest ]] && latest=$file
done
fi
if [ -d "/configbackup/Backups/manual" ]; then
for file in "/configbackup/Backups/manual"/*; do
[[ $file -nt $latest ]] && latest=$file
done
fi
if [ -z "$latest" ]; then
echo "No Backups found";
else
echo "Restoring $latest"
unzip -o $latest -d /config
fi
fi
chown ${PUID:-1000}:${PGID:-1000} /config/*.db*
if [ -n "$DBCHMOD" ]; then
chmod ${DBCHMOD} /config/${DB_NAME};
fi
if [[ -f /config/config.xml ]]; then
chown ${PUID:-1000}:${PGID:-1000} /config/config.xml
fi
exit 0
fi
if [ "$NOMAD_TASK_NAME" == "finalsync" ]; then
echo "Starting RSYNC"
flock -x /locks/${NOMAD_GROUP_NAME}_rsync.lock rsync -avv --exclude=Backups --exclude='*.db*' --exclude='*.db' --exclude='*db-litestream' --exclude='generations' /config/ /configbackup/
exit 0
fi
if [ "$NOMAD_TASK_NAME" == "db-sync" ]; then
echo "Starting DBsync: sleep"
#give time for app to datart properly
sleep ${SLEEPTIME:-15m}
echo "Starting DBsync"
exec flock -x /configbackup/${NOMAD_GROUP_NAME}_litesync.lock /usr/local/bin/litestream replicate -config /local/litestream.yml
exit 0
fi
################################################################################
# Anything else
################################################################################
exec "$@"