请教一下debian能否怎么实现硬盘无读写操作后10分钟关机?

[复制链接]
查看: 2696   回复: 6
发表于 2023-4-12 08:54:22 | 显示全部楼层 |阅读模式
群晖可以很好的实现硬盘无读写10分钟休眠,休眠10分钟关机

请教一下debian可以实现吗??先谢谢了
回复

使用道具 举报

 楼主| 发表于 2023-4-12 08:54:41 | 显示全部楼层
在 Debian 系统中,你可以通过创建一个简单的 shell 脚本和设置 cron 计划任务来实现硬盘在无读写操作 10 分钟后自动关机。以下是具体的操作步骤:

创建一个 shell 脚本,命名为 auto_shutdown.sh,并将其放在 /usr/local/bin/ 目录下:
  

sudo touch /usr/local/bin/auto_shutdown.sh
sudo chmod +x /usr/local/bin/auto_shutdown.sh
sudo nano /usr/local/bin/auto_shutdown.sh
在 auto_shutdown.sh 脚本中,粘贴以下代码:


#!/bin/bash

# 设置硬盘空闲时间(单位:秒)
IDLE_TIME=$((10*60))

# 获取硬盘设备名,通常是 /dev/sda 或 /dev/nvme0n1 等
DISK_DEVICE="/dev/sda"

# 获取硬盘上次读写的时间
PREV_IO_TIME=$(date +%s)

while true; do
  # 获取硬盘当前读写状态
  CURRENT_IO=$(awk -v disk_device="$DISK_DEVICE" '$3==disk_device {print $10+$6}' /proc/diskstats)
  sleep 5
  NEW_IO=$(awk -v disk_device="$DISK_DEVICE" '$3==disk_device {print $10+$6}' /proc/diskstats)

  # 检查是否有读写操作
  if [ "$NEW_IO" -eq "$CURRENT_IO" ]; then
    # 没有读写操作,检查空闲时间是否超过设置的阈值
    CURRENT_TIME=$(date +%s)
    IDLE_PERIOD=$((CURRENT_TIME - PREV_IO_TIME))

    if [ "$IDLE_PERIOD" -ge "$IDLE_TIME" ]; then
      # 空闲时间超过阈值,关机
      sudo shutdown -h now
      exit 0
    fi
  else
    # 有读写操作,重置上次读写时间
    PREV_IO_TIME=$(date +%s)
  fi
done
保存并关闭文件。

使用 crontab 在系统启动时运行此脚本。运行以下命令:



crontab -e
在打开的编辑器中,添加以下行:


@reboot /usr/local/bin/auto_shutdown.sh
保存并关闭文件。
现在,每次系统启动时,auto_shutdown.sh 脚本将自动运行。脚本会持续监控硬盘的读写操作,如果连续 10 分钟没有任何读写操作,系统将自动关机。请注意,这种方法可能不适用于所有硬盘和系统配置,可能需要根据实际情况进行调整。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 08:54:56 | 显示全部楼层
大佬厉害,我昨天搜索一天都没找到,你怎么这么会搜索
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 08:55:19 | 显示全部楼层
大佬厉害,我昨天搜索一天都没找到,你怎么这么会搜索
回复 支持 反对

使用道具 举报

发表于 2023-4-12 08:55:45 | 显示全部楼层
这很明显是GPT的杰作嘛.
回复 支持 反对

使用道具 举报

发表于 2023-4-12 08:55:55 | 显示全部楼层
GPT-4这方面还是挺好用的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-12 08:56:33 | 显示全部楼层
:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则