通过API调用删除Jellyfin播放列表歌曲失败问题求助
问题现象
- 调用DELETE API删除播放列表歌曲:
https://rxyzm.ml/Playlists/<playlistID>/Items?entryIds=<songId>&api_key=<apiKey>,返回状态码204,但歌曲未从播放列表移除 - 浏览器手动删除歌曲的请求参数(除无
api_key外)与API调用一致,可成功删除 - 手动编辑
/var/lib/jellyfin/data/playlists目录下的playlist.xml文件,修改无效果 - 其他API调用(如删除播放列表)正常,Wireshark确认Jellyfin已接收DELETE请求
环境信息
- Jellyfin版本:10.8.8
- 操作系统:Linux,架构Arm64
相关错误日志
[2022-12-30 10:13:39.960 +00:00] [ERR] 元数据保存器出错
System.IO.IOException: 进程无法访问文件 '/var/lib/jellyfin/data/playlists/Actief/playlist.xml',因为该文件正由另一进程使用。
在 Microsoft.Win32.SafeHandles.SafeFileHandle.Init(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
在 Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
在 System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
在 System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
在 System.IO.FileStream..ctor(String path, FileStreamOptions options)
在 MediaBrowser.LocalMetadata.Savers.BaseXmlSaver.SaveAsync(BaseItem item, CancellationToken cancellationToken)
在 MediaBrowser.Providers.Manager.ProviderManager.SaveMetadataAsync(BaseItem item, ItemUpdateType updateType, IEnumerable`1 savers)
问题根源
日志明确显示playlist.xml文件被其他进程占用,导致Jellyfin无法保存播放列表的变更——API请求被服务器接收并返回成功状态,但实际修改无法写入文件,最终导致歌曲未被移除;手动编辑文件也因同样的占用问题失效。
解决步骤
重启Jellyfin服务释放文件锁
sudo systemctl stop jellyfin sudo systemctl start jellyfin重启后重新调用删除歌曲的API测试。
定位并终止占用文件的进程
使用lsof工具查找占用目标文件的进程:sudo lsof /var/lib/jellyfin/data/playlists/Actief/playlist.xml根据输出中的PID,使用
kill命令终止对应进程(注意确认进程非系统关键进程):sudo kill <PID>修复目录与文件权限
确保Jellyfin用户对播放列表目录拥有完整读写权限:sudo chown -R jellyfin:jellyfin /var/lib/jellyfin/data/playlists sudo chmod -R 755 /var/lib/jellyfin/data/playlists验证API调用细节
- 确认
entryIds参数格式正确(单首歌曲直接传ID,多首用逗号分隔) - 尝试移除
api_key参数调用(手动操作无api_key可成功,需确认API权限配置是否存在冲突)
- 确认
内容的提问来源于stack exchange,提问作者Renaut Mestdagh

