| | #!/bin/bash |
| |
|
| | set -e |
| |
|
| | |
| | log() { |
| | echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ARIA2] $*" |
| | } |
| |
|
| | |
| | check_port() { |
| | local port=$1 |
| | if nc -z localhost "$port" 2>/dev/null; then |
| | return 1 |
| | else |
| | return 0 |
| | fi |
| | } |
| |
|
| | |
| | wait_for_aria2() { |
| | local port=$1 |
| | local max_attempts=30 |
| | local attempt=1 |
| | |
| | log "Waiting for aria2 to start on port $port..." |
| | |
| | while [ $attempt -le $max_attempts ]; do |
| | if nc -z localhost "$port" 2>/dev/null; then |
| | log "aria2 is running on port $port" |
| | return 0 |
| | fi |
| | |
| | sleep 1 |
| | attempt=$((attempt + 1)) |
| | done |
| | |
| | log "ERROR: aria2 failed to start after $max_attempts seconds" |
| | return 1 |
| | } |
| |
|
| | log "Starting aria2 service..." |
| |
|
| | |
| | export ARIA2_PORT="${ARIA2_PORT:-6800}" |
| | export ARIA2_WEBUI_PORT="${ARIA2_WEBUI_PORT:-6880}" |
| | export ARIA2_SECRET="${ARIA2_SECRET:-$(openssl rand -base64 32)}" |
| | export ARIA2_DOWNLOAD_DIR="${ARIA2_DOWNLOAD_DIR:-/home/user/download}" |
| | export ARIA2_SESSION_FILE="${ARIA2_SESSION_FILE:-/home/user/config/aria2.session}" |
| | export ARIA2_LOG_FILE="${ARIA2_LOG_FILE:-/home/user/log/aria2.log}" |
| |
|
| | |
| | export ARIA2_MAX_CONCURRENT="${ARIA2_MAX_CONCURRENT:-5}" |
| | export ARIA2_MAX_CONN_PER_SERVER="${ARIA2_MAX_CONN_PER_SERVER:-16}" |
| | export ARIA2_SPLIT="${ARIA2_SPLIT:-16}" |
| | export ARIA2_DISK_CACHE="${ARIA2_DISK_CACHE:-64M}" |
| | export ARIA2_BT_MAX_PEERS="${ARIA2_BT_MAX_PEERS:-55}" |
| | export ARIA2_MAX_OVERALL_DOWNLOAD_LIMIT="${ARIA2_MAX_OVERALL_DOWNLOAD_LIMIT:-0}" |
| | export ARIA2_MAX_DOWNLOAD_LIMIT="${ARIA2_MAX_DOWNLOAD_LIMIT:-0}" |
| | export ARIA2_MAX_OVERALL_UPLOAD_LIMIT="${ARIA2_MAX_OVERALL_UPLOAD_LIMIT:-0}" |
| | export ARIA2_MAX_UPLOAD_LIMIT="${ARIA2_MAX_UPLOAD_LIMIT:-0}" |
| |
|
| | |
| | mkdir -p "$(dirname "$ARIA2_SESSION_FILE")" \ |
| | "$(dirname "$ARIA2_LOG_FILE")" \ |
| | "$ARIA2_DOWNLOAD_DIR" |
| |
|
| | |
| | touch "$ARIA2_SESSION_FILE" |
| |
|
| | |
| | if ! check_port "$ARIA2_PORT"; then |
| | log "ERROR: Port $ARIA2_PORT is already in use" |
| | exit 1 |
| | fi |
| |
|
| | |
| | TEMPLATE_PATH="/etc/hf_docker_template/configs/templates/aria2.conf.template" |
| | if [ ! -f "$TEMPLATE_PATH" ]; then |
| | TEMPLATE_PATH="$(dirname "$(dirname "$(dirname "$0")")")/configs/templates/aria2.conf.template" |
| | fi |
| |
|
| | |
| | log "Generating aria2 configuration from template..." |
| | if [ -f "$TEMPLATE_PATH" ]; then |
| | envsubst < "$TEMPLATE_PATH" > /home/user/config/aria2.conf |
| | log "Using template from: $TEMPLATE_PATH" |
| | else |
| | log "ERROR: Template file not found at $TEMPLATE_PATH" |
| | exit 1 |
| | fi |
| |
|
| | log "Starting aria2 daemon..." |
| | aria2c --conf-path=/home/user/config/aria2.conf --daemon=true |
| |
|
| | |
| | if wait_for_aria2 "$ARIA2_PORT"; then |
| | log "aria2 daemon started successfully" |
| | log "RPC endpoint: http://localhost:$ARIA2_PORT/jsonrpc" |
| | log "RPC secret: $ARIA2_SECRET" |
| | log "Download directory: $ARIA2_DOWNLOAD_DIR" |
| | |
| | |
| | if [ -d "/usr/local/share/aria2" ]; then |
| | if check_port "$ARIA2_WEBUI_PORT"; then |
| | log "Starting aria2 web UI on port $ARIA2_WEBUI_PORT..." |
| | cd /usr/local/share/aria2 |
| | python3 -m http.server "$ARIA2_WEBUI_PORT" --bind 0.0.0.0 & |
| | WEBUI_PID=$! |
| | log "Web UI started with PID: $WEBUI_PID" |
| | log "Web UI URL: http://localhost:$ARIA2_WEBUI_PORT" |
| | else |
| | log "WARNING: Port $ARIA2_WEBUI_PORT is already in use, skipping web UI startup" |
| | fi |
| | else |
| | log "WARNING: AriaNg web UI not found in /usr/local/share/aria2" |
| | fi |
| | |
| | |
| | while true; do |
| | if ! nc -z localhost "$ARIA2_PORT" 2>/dev/null; then |
| | log "ERROR: aria2 daemon stopped unexpectedly" |
| | exit 1 |
| | fi |
| | sleep 30 |
| | done |
| | else |
| | log "ERROR: Failed to start aria2 daemon" |
| | exit 1 |
| | fi |