2025超强XMRig脚本:7×24小时无间断运行的自动重启与故障恢复方案
2026-02-04 05:15:46作者:滕妙奇
你是否曾因进程意外崩溃导致任务中断?是否在凌晨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 脚本架构设计
flowchart TD
A[启动入口] --> B{环境检查}
B -->|通过| C[系统优化预处理]
B -->|失败| D[修复或退出]
C --> E[启动XMRig进程]
E --> F[监控循环]
F -->|正常运行| G[记录状态]
F -->|检测异常| H[故障分类]
H --> I[轻度错误: 重启进程]
H --> J[重度错误: 系统修复]
I --> E
J --> C
二、跨平台自动重启实现
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
任务计划程序配置:
- 创建基本任务,触发器设置为"登录时"和"系统启动时"
- 操作选择"启动程序",浏览到批处理文件
- 条件选项卡勾选"唤醒计算机运行此任务"
- 设置选项卡勾选"任务失败时重新启动",最多尝试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 多维度故障检测机制
stateDiagram-v2
[*] --> 运行中
运行中 --> 正常: 状态良好
运行中 --> 轻度故障: 单次错误
运行中 --> 中度故障: 连续错误
运行中 --> 重度故障: 致命错误
轻度故障 --> 运行中: 进程重启
中度故障 --> 系统优化: 资源清理+重启
重度故障 --> 报警: 人工干预
系统优化 --> 运行中: 重启进程
系统优化 --> 报警: 优化失败
报警 --> [*]: 终止程序
正常 --> [*]: 正常退出
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
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust098- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
热门内容推荐
最新内容推荐
Notepad--极速优化指南:中文开发者的轻量编辑器解决方案Axure RP本地化配置指南:提升设计效率的中文界面切换方案3个技巧让你10分钟消化3小时视频,B站学习效率翻倍指南让虚拟角色开口说话:ComfyUI语音驱动动画全攻略7个效率倍增技巧:用开源工具实现系统优化与性能提升开源船舶设计新纪元:从技术原理到跨界创新的实践指南Zynq UltraScale+ RFSoC零基础入门:软件定义无线电Python开发实战指南VRCX虚拟社交管理系统:技术驱动的VRChat社交体验优化方案企业级Office插件开发:从概念验证到生产部署的完整实践指南语音转换与AI声音克隆:开源工具实现高质量声音复刻全指南
项目优选
收起
deepin linux kernel
C
28
16
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
567
98
暂无描述
Dockerfile
708
4.51 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
958
955
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.61 K
942
Ascend Extension for PyTorch
Python
572
694
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
413
339
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
1.42 K
116
暂无简介
Dart
951
235
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
2