You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Docker网络流量的Ubuntu自动休眠脚本故障排查求助

家庭Ubuntu服务器自动休眠问题

问题背景

我有一台运行Ubuntu的个人家庭服务器,希望在活动放缓后进入休眠以降低功耗。编写了Shell脚本,通过检测Docker网桥(br-开头网卡)的网络使用量,当5秒内总流量低于2MB阈值时,执行系统休眠操作。

脚本内容

#!/bin/bash

# Usage threshold in bytes (2MB = 5 * 1024 * 1024)
THRESHOLD=$((2 * 1024 * 1024))
INTERVAL=5

calculate_docker_traffic() {
    RX_BEFORE=0
    TX_BEFORE=0

    for IFACE in $(ls /sys/class/net | grep '^br-'); do
        RX_BEFORE=$((RX_BEFORE + $(cat /sys/class/net/$IFACE/statistics/rx_bytes)))
        TX_BEFORE=$((TX_BEFORE + $(cat /sys/class/net/$IFACE/statistics/tx_bytes)))
    done

    echo "$RX_BEFORE $TX_BEFORE"
}

read RX_BEFORE TX_BEFORE < <(calculate_docker_traffic)
sleep $INTERVAL
read RX_AFTER TX_AFTER < <(calculate_docker_traffic)
RX_DIFF=$((RX_AFTER - RX_BEFORE))
TX_DIFF=$((TX_AFTER - TX_BEFORE))
TOTAL_USAGE=$((RX_DIFF + TX_DIFF))

echo $TOTAL_USAGE
if (( TOTAL_USAGE < THRESHOLD )); then
    echo "Docker network usage is below threshold. Suspending system."
    sudo /usr/bin/systemctl suspend
else
    echo "Docker network usage is above threshold. Staying awake."
fi

定时任务配置

通过sudo crontab -e添加了每2分钟运行一次的定时任务:

*/2 * * * * /bin/bash /home/drew/auto_sleep.sh | logger -t mycmd

当前问题

查看/var/log/syslog日志显示脚本已执行,且检测到流量低于阈值并输出休眠提示,但服务器始终未进入休眠状态。

已尝试的解决方法

  • 使用sudo crontab而非普通用户crontab
  • 通过visudo配置用户执行systemctl suspend无需密码
  • 使用systemctl suspend的完整路径
  • 添加--force参数
  • 尝试硬编码密码通过sudo -S执行
  • 改用pm-suspend命令

疑问

  1. 是否因SSH连接导致无法休眠?
  2. 是否仍存在systemctl suspend的权限问题?
  3. 有无更简便的工具或方法实现服务器自动休眠?

内容的提问来源于stack exchange,提问作者Drew Scatterday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:03:11