docker-maintenance/ adds a systemd timer + prune.sh for the root LV that holds Docker's data-root and has filled to 100% before, risking ENOSPC corruption. The script sticks to the safe reclaim set (builder cache, dangling images, stopped containers) and deliberately avoids `-a` and volume pruning, which can destroy live data when run unattended. kanboard/backup.sh and healthcheck.sh bring Kanboard in line with the other services. seafile/ and vaultwarden/ backup scripts get fixes carried from the stability audit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
47 lines
1.5 KiB
Bash
Executable File
47 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Seafile backup script.
|
|
# Backs up MySQL databases and seafile data directory.
|
|
# Runs every 3 days via root crontab. Keeps last 5 backups.
|
|
# Notifies Zabbix (item seafile.backup.ts, id 70369 on AgapHost) after success.
|
|
|
|
set -euo pipefail
|
|
|
|
BACKUP_DIR="/mnt/backups/seafile"
|
|
DATA_DIR="/mnt/misc/seafile"
|
|
DATE=$(date '+%Y%m%d-%H%M')
|
|
DEST="$BACKUP_DIR/$DATE"
|
|
|
|
mkdir -p "$DEST"
|
|
|
|
# Dump all three Seafile databases from the running container
|
|
for DB in ccnet_db seafile_db seahub_db; do
|
|
docker exec seafile-mysql mysqldump \
|
|
-u seafile -pFWsYYeZa15ro6x \
|
|
--single-transaction "$DB" > "$DEST/${DB}.sql"
|
|
echo "Dumped: $DB"
|
|
done
|
|
|
|
# Copy seafile data (libraries, config — excludes mysql and caddy dirs)
|
|
rsync -a --delete \
|
|
--exclude='seafile-mysql/' \
|
|
--exclude='seafile-caddy/' \
|
|
"$DATA_DIR/" "$DEST/data/"
|
|
|
|
echo "$(date): Backup complete: $DEST"
|
|
ls "$DEST/"
|
|
|
|
# Notify Zabbix
|
|
if [[ -f /root/.zabbix_token ]]; then
|
|
ZABBIX_TOKEN=$(cat /root/.zabbix_token)
|
|
NOW_EPOCH=$(date '+%s')
|
|
env -u HTTPS_PROXY -u HTTP_PROXY -u ALL_PROXY -u https_proxy -u http_proxy -u all_proxy \
|
|
curl -s -X POST http://192.168.1.4:81/api_jsonrpc.php \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ZABBIX_TOKEN" \
|
|
-d "{\"jsonrpc\":\"2.0\",\"method\":\"history.push\",\"id\":1,\"params\":{\"itemid\":\"70369\",\"value\":$NOW_EPOCH}}" > /dev/null \
|
|
&& echo "Zabbix notified (seafile.backup.ts=$NOW_EPOCH)."
|
|
fi
|
|
|
|
# Rotate: keep last 5 backups
|
|
ls -1dt "$BACKUP_DIR"/[0-9]*-[0-9]* 2>/dev/null | tail -n +6 | xargs -r rm -rf
|