这个脚本主要用来检测盒子(seedbox)或者 linux 服务器的剩余空间。当已使用空间大于等于指定值时,会禁止指定目录的写入权限,并发送告警邮件。删掉种子或删除文件后,已使用空间小于指定值时,相关目录会自动恢复写入权限。


说明

  • limit 硬盘空间的使用百分比。92 指硬盘使用空间大于等于 92% 时,指定目录会被禁止写入,并发送告警邮件。
  • dir 被禁止写入的目录,需要修改成自己盒子的下载目录。
  • v_mail 收告警邮件的邮箱,需要修改成自己的邮箱。
  • log 日志的存放位置。
  • sleep 脚本循环执行的时间,30 指每过 30s 执行一次。

需要在盒子上提前搭建好邮件发送服务器,脚本才能自动发邮件。相关教程:Linux 搭建 SMTP 发送邮件服务器

当使用空间超过限制的空间使用百分比后,只会使盒子无法添加新种子,正在下载的种子还是会继续下载。如果想让正在下载的种子也停止下载,需要修改脚本中 chmod 555 $dirchmod 775 $dir ,分别改成 chmod -R 555 $dirchmod -R 775 $dir

盒子发出的邮件一般会被 QQ 邮箱、163 邮箱等扔到垃圾箱,所以要把盒子的邮件地址添加到收件邮箱的白名单。

告警邮件


使用

运行脚本

在 root 用户环境下,使用命令 nohup 命令运行脚本。

nohup /home/bfdz/rtorrent/check_size.sh &

结束脚本

使用命令 ps aux | grep check 找出进程,然后 kill 进程 ID。


源码

Gist: check_size.sh

#!/bin/bash

limit=92
dir=/home/bfdz/rtorrent/downloads/
v_mail=123@qq.com
log=/var/log/check_size.log

flag=0
while [ 1 ]
do
   v_size=$(df / | grep / | awk '{print $5}' | cut -d '%' -f 1)
   if [ $v_size -ge $limit ] && [ $flag -ne 1 ]; then
      chmod 555 $dir
      echo Lock_the_directory:$dir >> $log && date >> $log
      echo "盒子的使用空间超过 $limit%,目录 $dir 已禁止写入." | mail -s "=?UTF-8?B?`echo 盒子剩余空间不足 | base64`?=" $v_mail
      flag=1
   fi
   if [ $v_size -lt $limit ] && [ $flag -ne 0 ]; then
      chmod 775 $dir
      flag=0
   fi
   sleep 30
done