跳至主内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

故障排除

本文概述了初学者在运行 Jellyfin 服务器时可能遇到的常见问题解决方案。

播放问题

检查日志是最简单的排查方式,可通过 Web 客户端的控制台或服务器上的日志目录访问。

如果媒体无法转码,请首先检查 ffmpeg 日志。

网络问题

若可通过 HTTP 访问 Web 界面但无法通过 HTTPS 访问,很可能是证书配置错误。 Jellyfin 使用 PFX 文件处理 HTTPS 流量。 若创建文件时设置了密码,则需在设置页面的网络选项中输入该密码。

若能在本地局域网访问服务器但无法从外部访问,则可能是路由器配置问题。 请检查路由器的端口转发设置,确保服务器可从外部网络访问。

如果完全没有与网络流量相关的日志(即使是局域网连接),说明请求尚未到达服务器。 这通常意味着访问地址错误或网络其他环节存在问题。

调试日志

调试日志在故障排除时非常有用。由于 Jellyfin 未在前端 UI 提供控制选项,需手动编辑配置文件启用。

日志选项可在 Jellyfin 配置目录logging.json 文件中配置。某些平台还提供 logging.default.json 文件定义默认值,可通过自定义 logging.json 覆盖。

注意

启用调试日志会产生巨量输出:例如仅加载首页就会生成超过 4000 行日志(使用下方配置)。不建议在生产环境长期启用调试日志,仅应在故障排除期间使用。

备注

若在问题排查时被要求提供详细调试日志(超出少量行数),请尽可能压缩日志文件,否则文件体积会非常庞大。

启用调试日志需创建 logging.json 文件并添加以下内容:

{
"Serilog": {
"MinimumLevel": {
"Default": "Debug"
}
}
}

若已存在 logging.json 文件,请编辑 SerilogMinimumLevel 部分使其匹配上述配置,但不要修改文件中的其他值。

调试消息在日志中将显示为带 DBG 前缀的行,部分组件在此配置下还会在 INF 级别记录额外信息。

备注

logging.json 文件在上次服务器启动前已存在,Jellyfin 会在配置更改后自动重新加载而无需重启。若 logging.json 是上次启动后新建的,则需重启服务器才能使调试日志生效。

要恢复正常日志记录,可移除覆盖文件 logging.json(若之前新建了该文件),或将 logging.jsonSerilogMinimumLevel 部分恢复为默认值:

{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
}
}
}

实时监控

此功能允许 Jellyfin 在文件添加或修改时自动更新媒体库。 但该特性仅支持特定文件系统。

在 Linux 系统中,这通过 inotify 实现。 NFS 和 rclone 不支持 inotify,但可通过 mergerfs 等联合文件系统配合网络存储实现支持。

当媒体库规模过大时,可能收到类似错误:

[2019-12-31 09:11:36.652 -05:00]  [ERR] Error in Directory watcher for: "/media/movies"  System.IO.IOException: The configured user limit (8192) on the number of inotify watches has been reached.

如果您运行的是 Debian、RedHat 或其他类似 Linux 发行版,请在终端中执行以下命令:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl -p

如果您运行的是 ArchLinux,请执行以下命令:

echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

将其粘贴到终端并按 Enter 运行。对于 Docker 环境,此操作需要在宿主机而非容器内执行。
更多信息请参阅 Guard Listen README 关于增加 inotify 监视器的说明。

在 macOS 上卸载 Jellyfin

要完全清除 macOS 系统中的 Jellyfin 所有数据,请执行以下命令:

rm -Rfv ~/.config/jellyfin
rm -Rfv ~/.cache/jellyfin
rm -Rfv ~/.local/share/jellyfin

解锁被锁定的用户账户

当管理员账户被锁定且"忘记密码"功能失效时,需要手动解锁用户。
请先在系统中定位 jellyfin.db 文件。
Linux 系统默认路径为:/var/lib/jellyfin/data/
其他环境路径请参考服务器路径文档

Linux 命令行操作

操作前请确保已安装 sqlite3。
Debian 系系统可通过 apt install sqlite3 安装。
随后执行以下命令/SQL查询:

sqlite3 /PATH/TO/JELLYFIN/DB/jellyfin.db
UPDATE Users SET InvalidLoginAttemptCount = 0 WHERE Username = 'LockedUserName';
UPDATE Permissions SET Value = 0 WHERE Kind = 2 AND UserId IN (SELECT Id FROM Users WHERE Username = 'LockedUserName');
.exit

SQLiteBrowser 图形界面操作

在具备桌面环境的系统中可使用 SQLiteBrowser
首先在 SQLite Browser 中打开数据库文件,
进入 Execute SQL 标签页并执行以下查询:

UPDATE Users SET InvalidLoginAttemptCount = 0 WHERE Username = 'LockedUserName';
UPDATE Permissions SET Value = 0 WHERE Kind = 2 AND UserId IN (SELECT Id FROM Users WHERE Username = 'LockedUserName');

修复管理员账户权限

当管理员账户权限异常时,可通过简单 SQL 查询修复。

注意

手动修改数据库可能导致实例不可修复的损坏。操作前请备份数据库:
cp /PATH/TO/JELLYFIN/DB/jellyfin.db /PATH/TO/JELLYFIN/DB/jellyfin.db.bck

操作前请确保已安装 sqlite3。
Debian 系系统可通过 apt install sqlite3 安装。
随后执行以下命令/SQL查询:
默认路径列表请参考配置目录文档

sqlite3 /PATH/TO/JELLYFIN/DB/jellyfin.db

查看权限概览

查看所有用户的当前权限:

SELECT Permissions.Value,Permissions.Kind,Users.Username  FROM Permissions INNER JOIN Users ON Permissions.UserID = Users.Id;

仅检查管理员账户权限(请将 AdminUsername 替换为实际管理员用户名):

SELECT Value,Kind FROM Permissions WHERE UserId IN (SELECT Id FROM Users WHERE Username = 'AdminUsername');

首行数值 1 或 0 表示权限是否启用。各权限类型说明详见 Jellyfin 源代码中的 PermissionKind 枚举

修复权限

备注

并非所有权限都是必需的,后续可通过 Web 界面移除多余权限。

UPDATE Permissions SET Value = 1 WHERE (Kind = 0 OR Kind = 3 OR Kind = 4 OR Kind = 5 OR Kind = 6 OR Kind = 7 OR Kind = 8 OR Kind = 9 OR Kind = 10 OR Kind = 11 OR Kind = 12 OR Kind = 13 OR Kind = 14 OR Kind = 15 OR Kind = 16 OR Kind = 17 OR Kind = 18 OR Kind = 19 OR Kind = 20 OR Kind = 21) AND UserId IN (SELECT Id FROM Users WHERE Username = 'AdminUsername');

.exit

文本渲染异常问题

若字符字体缺失,文本可能显示为方框 ☐☐☐☐☐☐。安装对应语言字体可解决此问题:

  • 媒体库封面:需在服务器系统安装字体
  • 字幕:字体来源取决于客户端
    具体安装位置请参考字体配置文档

活动设备未显示问题

若仪表盘中的活动设备区域未显示任何设备的内容播放进度,可能是因为系统时钟未同步。在基于 systemd 的 Linux 系统中,您可通过运行以下命令启用在线 NTP 服务器同步(该操作将启动并启用 chronydntpd 服务)。完成后请务必重启 Jellyfin。

timedatectl set-ntp true

数据库锁定错误

当遇到扫描失败或数据不一致问题时,请检查日志文件中是否有类似"Database Locked"的错误。若发现此类错误,请先在管理面板检查并行扫描任务限制并降低该值。若当前设置为0,请调整为 CPU 核心数的一半。若仍无效,可尝试更改锁定模式(同时请保持任务限制在合理低值)。

锁定模式有三种可选设置:

  • NoLock - 默认模式,适用于大多数用户

  • Optimistic - 尝试所有写入操作,失败时自动重试

  • Pessimistic - 执行写入操作时始终阻塞所有读取

停止 Jellyfin 服务器并进入其配置目录。目录中有多个 XML 文件,请找到 database.xml 文件并编辑 LockingBehavior 选项:

<?xml version="1.0" encoding="utf-8"?>
<DatabaseConfigurationOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DatabaseType>Jellyfin-SQLite</DatabaseType>
<LockingBehavior>Optimistic</LockingBehavior>
</DatabaseConfigurationOptions>

完成后重启 Jellyfin 实例。若问题仍未解决,可尝试将 LockingBehavior 设为 Pessimistic(悲观锁),但请注意这会带来显著性能损耗,因此仅建议在 Optimistic(乐观锁)无法解决问题时使用。

LXC 特定问题

团队已注意到 LXC 容器存在特定问题。若在 LXC 环境中将锁定模式设为 Optimistic 后出现此类错误,建议迁移至完全虚拟化(虚拟机)或 Docker 环境。短期内 LXC 问题不太可能得到解决,对于 LXC 环境中的数据库锁定问题我们将无法提供支持。