自动清理EMBY转码目录的脚本(Linux)

在之前使用Emby观看直播时,我发现到transcoding-temp会一直保留直播放开始以来的所有视频切片,这常常导致服务器磁盘使用率达到100%。为了避免因为磁盘空间不足引发一些严重问题的情况,我创建了RAM磁盘用来存储这些临时文件,并且减少磁盘的读写

尽管这并不能从根本上解决问题,当时我很少看直播,因此没怎么重视。直到最近,由于我开始长时间看直播,然后我的内存磁盘满了….

我决定这次认真处理这个问题。(已经过去了5年,Emby团队仍然没有解决这个问题)

首先~直接放脚本~

#!/bin/bash

target_directory="/tmp/tmpfs/transcoding-temp"
max_size=24000  # MB


get_directory_size() {
    du -sm "$1" | awk '{print $1}'
}

while [ "$(get_directory_size "$target_directory")" -gt $max_size ]; do
    old_file=$(find "$target_directory" -type f -name "*.ts" -size +1 -printf '%T+ %p\n' | sort | head -n 1 | awk '{print $2}')

    if [ -z "$old_file" ]; then
        break
    fi

    echo "" > "$old_file"
    echo "clean: $old_file"
done

echo "Operation Completed"

大概解释一下:

  • target_directory 设置缓存文件夹的位置。
  • max_size 设置缓存最大的大小。
  • get_directory_size 函数使用 du 命令获取目录的大小。
  • 接下来开始循环直到目录大小小于等于 max_size ,如果大于 max_size 时执行以下操作:
    • 使用 find 命令找到目录中存在数据的 .ts 文件。
    • sort 对找到的文件按修改时间进行排序。
    • head -n 1 选取排序后的第一个文件,即最旧的文件。
    • 使用 awk '{print $2}' 提取文件路径。
    • 接着判断是否找到文件,如果没有找到就结束循环
    • 如果找到最旧的文件,通过 echo "" > "$old_file" 清空文件内容,但保留文件本身。因为这些文件的位置会在M3U8文件中存在, 为了避免一些错误, 所以没有直接删除文件, 如果回放到空文件会快速的回放到有数据的部分

如何使用呢?

第一步首先上传脚本到服务器(假设在/opt/clean-transcoding-temp.sh)

第二步给予脚本执行权限~

chmod 711 /opt/clean-transcoding-temp.sh

第三步创建任务计划~

crontab -e

添加一行任务~

*/5 * * * *  /opt/clean-transcoding-temp.sh
#上面的*/5 * * * *  /opt/clean-transcoding-temp.sh 代表着每5分钟运行/opt/clean-transcoding-temp.sh
*/5    *    *    *    *   /opt/clean-transcoding-temp.sh
-      -    -    -    -   -
|      |    |    |    |   |
|      |    |    |    |   +----- 启动的命令或脚本
|      |    |    |    +----- 一周的某一天 (0 - 7) (星期天=0 或者 7) 或者 sun,mon,tue,wed,thu,fri,sat
|      |    |    +---------- 月 (1 - 12) 或者 jan,feb,mar,apr ...
|      |    +--------------- 1个月的某一天 (1 - 31)
|      +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

最后欢迎评论点赞哦(o^_^o)

点赞
  1. 不重要说道:
    Google Chrome Windows 10

发表评论

请稍后(无限等待请刷新重试)....

由于当前政策法规,主站禁止评论,请前往Global

电子邮件地址不会被公开。必填项已用 * 标注