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
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
532
3.75 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
336
178
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
886
596
Ascend Extension for PyTorch
Python
340
405
暂无简介
Dart
772
191
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
986
247
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
416
4.21 K
React Native鸿蒙化仓库
JavaScript
303
355