Jellyfin 自定义扫描频率

序言

之前的文章中,我提到“Jellyfin 计划任务『扫描媒体库』并不吃资源,频繁运行也没事”。实际上,这不准确。这个任务对于资源的占用取决于媒体/文件的数量。

最近我写了一个项目,用来爬取视频,同时自动生成 nfo 文件和视频海报。在这个新的视频目录中,最多有 2000 个文件(大部分是 nfo 和海报图片,视频还没怎么下载),有四级子目录。但此时计划任务的 CPU 占用量已经大幅增加。这显然有问题。

经过一番研究,我发现使用 crontab 定时调用 Jellyfin API,是目前唯一实现不同媒体库不同扫描频率的解决方案。

步骤

关闭计划任务

进入『控制台 | 计划任务 | 扫描媒体库』,删除现有任务:

image-20240611131240942

申请一个 API 密钥

进入『控制台 | API 密钥』,创建一个:

image-20240611131529710

获得 API 端口

我建议直接用 F12 抓包:

image-20240611131657198

点击『刷新』前,先按下 F12。然后找到对应的请求

image-20240611131710749

/Items/媒体库ID/Refresh?扫描参数,这个 URL 可以直接拿来用。

image-20240611131902161

crontab

1
2
3
4
# 编辑
crontab -e
# 查看
crontab -l

curl 格式如下:

1
curl -k -X POST "https://IP地址:端口/Items/媒体库ID/Refresh?Recursive=true&ImageRefreshMode=Default&MetadataRefreshMode=Default&ReplaceAllImages=false&ReplaceAllMetadata=false" -H "Authorization: MediaBrowser Token=API密钥"

crontab 格式如下:

1
2
# 新番:每十分钟一次
*/10 * * * * curl -k -X POST "https://IP地址:端口/Items/媒体库ID/Refresh?Recursive=true&ImageRefreshMode=Default&MetadataRefreshMode=Default&ReplaceAllImages=false&ReplaceAllMetadata=false" -H "Authorization: MediaBrowser Token=API密钥"

其他时间配置:

  • 每小时一次:0 * * * *
  • 每周一次:比如 0 17 * * 0,每周天下午 5 点;
  • 每两周一次:比如 0 11 1,15 * *,每月1号和15号的早上11点;

查看 crontab 的日志:

1
2
3
4
# 1. 使用journalctl 
journalctl -u crond
# 2. 直接查看日志文件,这个更全
cat /var/log/cron

实际效果

image-20240611154250550

这个软件是 NetData,我之后会写一篇关于它的博文。

红色的是扫描爬取的视频的媒体库,而蓝色的是扫描本季新番的媒体库。

可以看到:

  • 蓝色的平均值不超过 5%,因此每十分钟执行一次没问题 —— 这个频率也可以及时地让 Jellyfin 刮削新下载好的番剧。

  • 如果按照之前 Jellyfin 的计划任务,所有媒体库都一小时扫描一次,那么对 CPU 的占用显然太大了。

参考