#!/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..." # 检查是否包含逗号 if [[ "$DATASET_MUSIC_NAME" =~ , ]]; then # 将字符串按逗号分割成数组 IFS=',' read -r -a music_names <<< "$DATASET_MUSIC_NAME" # 遍历每个音乐名称 for name in "${music_names[@]}"; do # 去除可能的空白字符 name=$(echo "$name" | xargs) if [ -n "$name" ]; then python /update_music.py "$name" "$MUSIC_TOKEN" "$MUSIC_DIR" "$MUSIC_UPDATE_INTERVAL" "false" & pid=$! echo "[INFO] Music update process started for '$name' with PID: $pid" fi done else # 原有的单名称处理逻辑 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" fi 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