2025超强XMRig脚本:7×24小时无间断运行的自动重启与故障恢复方案

2025超强XMRig脚本:7×24小时无间断运行的自动重启与故障恢复方案

【免费下载链接】xmrig RandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark 【免费下载链接】xmrig 项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig

你是否曾因进程意外崩溃导致任务中断?是否在凌晨3点被系统警报惊醒?本文将系统讲解如何构建企业级XMRig守护脚本,通过进程监控、错误自愈、资源优化三重保障,实现99.99%的服务可用性。读完本文你将掌握:

  • 3种跨平台自动重启方案的实现与对比
  • 10类故障场景的智能检测与恢复策略
  • 内存/CPU资源优化的5个关键脚本配置
  • 完整的日志分析与告警系统搭建方法

一、脚本基础架构

1.1 最小可行脚本实现

XMRig官方提供的基础脚本仅包含启动命令,缺乏故障处理能力:

:: 官方基础脚本 (pool_mine_example.cmd)
cd /d "%~dp0"
xmrig.exe -o xmrpool.eu:3333 -u YOUR_WALLET_ADDRESS -p x
pause

这种脚本在遇到网络波动、连接失败或性能骤降时会直接退出,造成任务中断。我们需要构建包含进程守护错误检测自动恢复三大模块的增强脚本。

1.2 脚本架构设计

mermaid

二、跨平台自动重启实现

2.1 Windows系统实现(批处理+任务计划程序)

增强型脚本 (xmrig_guard.bat)

@echo off
setlocal enabledelayedexpansion

:: 配置区域
set WALLET=48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD
set POOL=xmrpool.eu:3333
set LOG_FILE=xmrig_mining.log
set MAX_RESTARTS=10
set RESTART_DELAY=30
set CONFIG_FILE=config.json

:: 初始化计数器
set restart_count=0
set error_count=0

:monitor_loop
:: 检查重启次数是否超限
if %restart_count% geq %MAX_RESTARTS% (
    echo 达到最大重启次数 %MAX_RESTARTS%,程序退出 >> %LOG_FILE%
    exit /b 1
)

:: 记录启动信息
echo [%date% %time%] 启动XMRig (第 %restart_count% 次尝试) >> %LOG_FILE%

:: 启动XMRig并等待退出
xmrig.exe -c %CONFIG_FILE% -o %POOL% -u %WALLET% -p x >> %LOG_FILE% 2>&1
set exit_code=%errorlevel%

:: 记录退出信息
echo [%date% %time%] XMRig退出,代码: %exit_code% >> %LOG_FILE%

:: 分析退出码
if %exit_code% equ 0 (
    echo 正常退出,程序终止 >> %LOG_FILE%
    exit /b 0
) else if %exit_code% equ 2 (
    echo 配置文件错误,需要人工干预 >> %LOG_FILE%
    exit /b 2
) else if %exit_code% equ 4 (
    echo 网络错误,即将重试 >> %LOG_FILE%
    set /a error_count+=1
    if %error_count% geq 3 (
        echo 多次网络错误,执行网络修复 >> %LOG_FILE%
        netsh winsock reset >> %LOG_FILE% 2>&1
        ipconfig /renew >> %LOG_FILE% 2>&1
        set error_count=0
    )
) else (
    echo 未知错误,代码: %exit_code% >> %LOG_FILE%
)

:: 递增重启计数器并等待
set /a restart_count+=1
echo 等待 %RESTART_DELAY% 秒后重启... >> %LOG_FILE%
timeout /t %RESTART_DELAY% /nobreak >nul
goto monitor_loop

任务计划程序配置

  1. 创建基本任务,触发器设置为"登录时"和"系统启动时"
  2. 操作选择"启动程序",浏览到批处理文件
  3. 条件选项卡勾选"唤醒计算机运行此任务"
  4. 设置选项卡勾选"任务失败时重新启动",最多尝试3次,间隔1分钟

2.2 Linux系统实现(systemd服务+bash脚本)

守护脚本 (xmrig_guard.sh)

#!/bin/bash
# 守护进程脚本 v2.0
# 配置区域
WALLET="48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD"
POOL="xmrpool.eu:3333"
LOG_FILE="/var/log/xmrig_mining.log"
CONFIG_FILE="/etc/xmrig/config.json"
MAX_RESTARTS=10
RESTART_DELAY=30
HEALTH_CHECK_INTERVAL=60

# 系统优化预处理
pre_optimize() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 执行系统优化" >> $LOG_FILE
    
    # 启用1GB大页内存
    if [ -f "/scripts/enable_1gb_pages.sh" ]; then
        /bin/bash /scripts/enable_1gb_pages.sh >> $LOG_FILE 2>&1
    fi
    
    # 应用CPU优化
    if [ -f "/scripts/randomx_boost.sh" ]; then
        /bin/bash /scripts/randomx_boost.sh >> $LOG_FILE 2>&1
    fi
    
    # 设置进程优先级
    renice -n -5 -p $$ >> $LOG_FILE 2>&1
}

# 健康检查函数
health_check() {
    local pid=$1
    local start_time=$(date +%s)
    
    while true; do
        # 检查进程是否存在
        if ! ps -p $pid > /dev/null; then
            return 1
        fi
        
        # 检查最近日志是否有错误
        if grep -q "error" <(tail -n 20 $LOG_FILE); then
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] 检测到错误日志" >> $LOG_FILE
            return 2
        fi
        
        # 检查性能是否为零(需要xmrig支持API)
        if curl -s "http://127.0.0.1:3000/1/summary" | grep -q "\"hashrate\": {\"total\": \[0,"; then
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] 检测到性能为零" >> $LOG_FILE
            return 3
        fi
        
        # 检查时间间隔
        sleep $HEALTH_CHECK_INTERVAL
        
        # 检查是否超过最大运行时间(防止内存泄漏)
        local current_time=$(date +%s)
        if [ $((current_time - start_time)) -ge 86400 ]; then
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] 达到最大运行时间,主动重启" >> $LOG_FILE
            return 4
        fi
    done
}

# 主程序
main() {
    pre_optimize
    
    local restart_count=0
    
    while [ $restart_count -lt $MAX_RESTARTS ]; do
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 启动XMRig (第 $restart_count 次尝试)" >> $LOG_FILE
        
        # 启动XMRig并记录PID
        xmrig -c $CONFIG_FILE -o $POOL -u $WALLET -p x >> $LOG_FILE 2>&1 &
        local pid=$!
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] XMRig启动,PID: $pid" >> $LOG_FILE
        
        # 执行健康检查
        health_check $pid
        local check_result=$?
        
        # 处理健康检查结果
        if [ $check_result -eq 0 ]; then
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] XMRig正常退出" >> $LOG_FILE
            exit 0
        else
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] 健康检查失败,代码: $check_result" >> $LOG_FILE
            
            # 如果进程仍在运行,强制终止
            if ps -p $pid > /dev/null; then
                kill -9 $pid
                sleep 5
            fi
            
            restart_count=$((restart_count + 1))
            echo "[$(date +'%Y-%m-%d %H:%M:%S')] 等待 $RESTART_DELAY 秒后重启 ($restart_count/$MAX_RESTARTS)" >> $LOG_FILE
            sleep $RESTART_DELAY
        fi
    done
    
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 达到最大重启次数,程序退出" >> $LOG_FILE
    exit 1
}

main

Systemd服务配置 (/etc/systemd/system/xmrig-miner.service)

[Unit]
Description=XMRig Service with Auto-Restart
After=network.target

[Service]
Type=simple
User=miner
Group=miner
WorkingDirectory=/data/web/disk1/git_repo/GitHub_Trending/xm/xmrig
ExecStart=/bin/bash /scripts/xmrig_guard.sh
Restart=always
RestartSec=10
KillMode=process
LimitNOFILE=1024000
LimitNPROC=infinity
LimitCORE=infinity
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable xmrig-miner.service
sudo systemctl start xmrig-miner.service

2.3 三种重启方案对比

特性Windows批处理+任务计划Linux Systemd服务Docker容器化方案
实现复杂度中等
资源占用极低
跨平台性仅限Windows仅限Linux全平台
隔离性
日志管理基础完善优秀
自动更新支持复杂中等简单
系统资源优化有限丰富中等
适用场景个人使用专业环境企业级部署

三、智能故障检测与恢复策略

3.1 多维度故障检测机制

mermaid

3.2 故障类型与处理策略

故障类型特征检测方法恢复策略重试次数
网络波动连接超时、无响应日志关键词、API超时重启进程、切换备用池5
性能骤降性能<50%预期值持续3分钟API监控、日志分析重启进程、清除缓存3
内存泄漏内存占用持续增长定期检查进程内存主动重启、内存优化每日1次
配置错误启动失败、配置文件错误退出码2、日志关键词停止并报警、使用默认配置0
系统资源耗尽高CPU/内存占用、OOM系统监控工具杀死竞争进程、重启系统2
硬件故障温度过高、硬件错误传感器监控、dmesg日志降频运行、关闭故障设备1

3.3 高级恢复技术:状态保持与无缝切换

会话状态保存实现(Linux示例):

# 在xmrig_guard.sh中添加状态保存功能
save_session_state() {
    local session_file="/tmp/xmrig_session.json"
    local pid=$1
    
    # 获取当前作业ID和高度
    if curl -s "http://127.0.0.1:3000/1/summary" > "$session_file.tmp"; then
        jq '.job' "$session_file.tmp" > "$session_file"
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 保存会话状态到 $session_file" >> $LOG_FILE
        rm "$session_file.tmp"
    else
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 会话状态保存失败" >> $LOG_FILE
    fi
}

# 在健康检查失败时调用
save_session_state $pid

# 重启时恢复状态(需XMRig支持)
xmrig ... --restore-session /tmp/xmrig_session.json

备用池自动切换配置(config.json):

"pools": [
    {
        "url": "xmrpool.eu:3333",
        "user": "YOUR_WALLET_ADDRESS",
        "pass": "x",
        "enabled": true,
        "keepalive": true,
        "tls": false
    },
    {
        "url": "pool.supportxmr.com:5555",
        "user": "YOUR_WALLET_ADDRESS",
        "pass": "x",
        "enabled": true,
        "keepalive": true,
        "tls": false,
        "priority": 1
    },
    {
        "url": "mine.xmrpool.net:5555",
        "user": "YOUR_WALLET_ADDRESS",
        "pass": "x",
        "enabled": true,
        "keepalive": true,
        "tls": false,
        "priority": 2
    }
],
"failover": true,
"failover-retry": 30

四、系统优化与资源管理

4.1 系统优化脚本整合

Linux完整优化脚本 (pre_mining_optimize.sh)

#!/bin/bash -e
# 系统优化脚本 - 提升XMRig稳定性和性能

# 1. 内存优化
echo "设置内存参数..."
sysctl -w vm.swappiness=10
sysctl -w vm.dirty_background_ratio=1
sysctl -w vm.dirty_ratio=5
sysctl -w vm.drop_caches=3

# 2. 启用1GB大页内存
echo "启用1GB大页内存..."
if [ -f "/scripts/enable_1gb_pages.sh" ]; then
    /bin/bash /scripts/enable_1gb_pages.sh
else
    sysctl -w vm.nr_hugepages=$(nproc)
    for i in $(find /sys/devices/system/node/node* -maxdepth 0 -type d); do
        echo 3 > "$i/hugepages/hugepages-1048576kB/nr_hugepages";
    done
fi

# 3. CPU优化
echo "优化CPU设置..."
if [ -f "/scripts/randomx_boost.sh" ]; then
    /bin/bash /scripts/randomx_boost.sh
else
    # 基本CPU优化
    if grep -E 'AMD Ryzen|AMD EPYC|AuthenticAMD' /proc/cpuinfo > /dev/null; then
        echo "应用AMD CPU优化..."
        modprobe msr allow_writes=on
        wrmsr -a 0xc0011020 0
        wrmsr -a 0xc0011021 0x40
        wrmsr -a 0xc0011022 0x1510000
        wrmsr -a 0xc001102b 0x2000cc16
    elif grep "Intel" /proc/cpuinfo > /dev/null; then
        echo "应用Intel CPU优化..."
        modprobe msr allow_writes=on
        wrmsr -a 0x1a4 0xf
    fi
fi

# 4. 网络优化
echo "优化网络设置..."
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=15

# 5. 关闭不必要服务
echo "关闭不必要服务..."
systemctl stop

【免费下载链接】xmrig RandomX, KawPow, CryptoNight and GhostRider unified CPU/GPU miner and RandomX benchmark 【免费下载链接】xmrig 项目地址: https://gitcode.com/GitHub_Trending/xm/xmrig

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值