#!/bin/bash # 设置默认值 MUSIC_DIR=${MUSIC_DIR:-/music} DATASET_MUSIC_NAME=${DATASET_MUSIC_NAME:-"your-username/music-dataset"} MUSIC_TOKEN=${MUSIC_TOKEN:-""} BACKUP_DATASET_ID=${BACKUP_DATASET_ID:-"your-username/navidrome-backup"} BACKUP_INTERVAL=${BACKUP_INTERVAL:-3600} # 默认1小时备份一次 MUSIC_UPDATE_INTERVAL=${MUSIC_UPDATE_INTERVAL:-3600} # 默认1小时更新一次音乐 echo "[INFO] Starting Navidrome setup" # 确保目录存在并有正确权限 mkdir -p ${MUSIC_DIR} mkdir -p /data/cache mkdir -p /.cache chmod -R 755 ${MUSIC_DIR} chmod -R 755 /data chmod -R 755 /.cache # 激活Python虚拟环境 source /venv/bin/activate # 恢复备份(如果存在) if [ -n "$BACKUP_DATASET_ID" ] && [ -n "$MUSIC_TOKEN" ]; then echo "[INFO] Attempting to restore from backup..." python /backup.py download "$MUSIC_TOKEN" "$BACKUP_DATASET_ID" "/data" fi # 启动音乐更新进程 if [ -n "$DATASET_MUSIC_NAME" ] && [ -n "$MUSIC_TOKEN" ]; then echo "[INFO] Starting music update process..." python /update_music.py "$DATASET_MUSIC_NAME" "$MUSIC_TOKEN" "$MUSIC_DIR" "$MUSIC_UPDATE_INTERVAL" "false" & MUSIC_UPDATE_PID=$! echo "[INFO] Music update process started with PID: $MUSIC_UPDATE_PID" else echo "[WARNING] Music update disabled. Set DATASET_MUSIC_NAME and MUSIC_TOKEN to enable." fi # 检查音乐目录 echo "[INFO] Checking music directory..." ls -la ${MUSIC_DIR} # 备份函数 backup_data() { while true; do echo "[INFO] Starting backup process $(date)" if [ -d "/data" ]; then echo "[INFO] Backing up Navidrome data to HuggingFace..." python /backup.py upload "$MUSIC_TOKEN" "$BACKUP_DATASET_ID" "/data" else echo "[WARNING] Data directory does not exist, skipping backup..." fi echo "[INFO] Next backup in ${BACKUP_INTERVAL} seconds..." sleep $BACKUP_INTERVAL done } # 如果设置了备份数据集ID,则启动备份进程 if [ -n "$BACKUP_DATASET_ID" ] && [ -n "$MUSIC_TOKEN" ]; then echo "[INFO] Starting backup process with dataset: ${BACKUP_DATASET_ID}" backup_data & BACKUP_PID=$! echo "[INFO] Backup process started with PID: $BACKUP_PID" else echo "[WARNING] Backup disabled. Set BACKUP_DATASET_ID and MUSIC_TOKEN to enable." fi # 找到navidrome可执行文件的路径 NAVIDROME_PATH=$(which navidrome || find /app -name navidrome -type f 2>/dev/null | head -1) if [ -z "$NAVIDROME_PATH" ]; then echo "[ERROR] Could not find navidrome executable" exit 1 else echo "[INFO] Found navidrome at: $NAVIDROME_PATH" # 启动Navidrome echo "[INFO] Starting Navidrome..." exec $NAVIDROME_PATH fi