104 lines
2.9 KiB
Bash
Executable File
104 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Dependency Update Script
|
|
# Safely stops services, runs updates, and restarts services
|
|
# Designed to be run by systemd timer at scheduled intervals
|
|
|
|
set -e
|
|
|
|
LOG_FILE="/opt/media-downloader/logs/dependency-updates.log"
|
|
LOCK_FILE="/tmp/dependency-updates.lock"
|
|
|
|
log() {
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
# Check for lock file to prevent concurrent runs
|
|
if [ -f "$LOCK_FILE" ]; then
|
|
log "[WARN] Another update process is running. Exiting."
|
|
exit 0
|
|
fi
|
|
|
|
# Create lock file
|
|
trap "rm -f $LOCK_FILE" EXIT
|
|
echo $$ > "$LOCK_FILE"
|
|
|
|
log "[INFO] =========================================="
|
|
log "[INFO] Starting dependency update process"
|
|
log "[INFO] =========================================="
|
|
|
|
# Check if scheduler is running
|
|
SCHEDULER_WAS_RUNNING=false
|
|
if systemctl is-active --quiet media-downloader; then
|
|
SCHEDULER_WAS_RUNNING=true
|
|
log "[INFO] Stopping scheduler for updates..."
|
|
systemctl stop media-downloader
|
|
|
|
# Wait for clean shutdown
|
|
sleep 5
|
|
log "[INFO] Scheduler stopped"
|
|
fi
|
|
|
|
# Run dependency updates
|
|
log "[INFO] Running dependency updates..."
|
|
cd /opt/media-downloader
|
|
|
|
/opt/media-downloader/venv/bin/python3 -c "
|
|
import sys
|
|
sys.path.insert(0, '/opt/media-downloader')
|
|
from modules.dependency_updater import DependencyUpdater
|
|
from modules.settings_manager import SettingsManager
|
|
|
|
# Load config
|
|
settings = SettingsManager()
|
|
config = settings.get_all()
|
|
update_config = config.get('dependency_updater', {}) or config.get('dependency_updates', {})
|
|
|
|
if not update_config.get('enabled', True):
|
|
print('[INFO] Dependency updates disabled in config')
|
|
sys.exit(0)
|
|
|
|
updater = DependencyUpdater(config=update_config, scheduler_mode=True)
|
|
results = updater.force_update_check()
|
|
|
|
print('[INFO] Update results:')
|
|
for component, updated in results.items():
|
|
status = 'Updated' if updated else 'Current'
|
|
print(f' - {component}: {status}')
|
|
" 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
UPDATE_STATUS=$?
|
|
|
|
if [ $UPDATE_STATUS -eq 0 ]; then
|
|
log "[INFO] Dependency updates completed successfully"
|
|
else
|
|
log "[ERROR] Dependency updates failed with status $UPDATE_STATUS"
|
|
fi
|
|
|
|
# Restart API to pick up any Python package changes
|
|
log "[INFO] Restarting API service..."
|
|
systemctl restart media-downloader-api
|
|
sleep 2
|
|
|
|
if systemctl is-active --quiet media-downloader-api; then
|
|
log "[INFO] API service restarted successfully"
|
|
else
|
|
log "[ERROR] API service failed to restart!"
|
|
fi
|
|
|
|
# Restart scheduler if it was running
|
|
if [ "$SCHEDULER_WAS_RUNNING" = true ]; then
|
|
log "[INFO] Restarting scheduler..."
|
|
systemctl start media-downloader
|
|
sleep 3
|
|
|
|
if systemctl is-active --quiet media-downloader; then
|
|
log "[INFO] Scheduler restarted successfully"
|
|
else
|
|
log "[ERROR] Scheduler failed to restart!"
|
|
fi
|
|
fi
|
|
|
|
log "[INFO] =========================================="
|
|
log "[INFO] Dependency update process complete"
|
|
log "[INFO] =========================================="
|