Transmission script-torrent-done脚本未执行,配置权限无误仍无效求助
排查Transmission完成脚本不执行的问题
让我一步步帮你捋清楚可能的问题——Transmission的种子完成脚本不跑确实挺闹心的,我整理了几个常见的排查方向,你挨个试下:
先确认脚本路径和访问权限
虽然你配置了路径,但得确保Transmission运行的用户(transmission)能真的访问到这个脚本。可以跑这条命令测试:su - transmission -c "ls /var/lib/transmission/.config/transmission-daemon/torrent_complete.sh"如果提示文件不存在,那要么是路径写错了(比如大小写、目录层级不对),要么是transmission用户没权限进入父目录。
手动测试脚本本身是否能正常运行
权限设了777不代表脚本本身没毛病。切换到transmission用户手动执行脚本:su - transmission -c "/var/lib/transmission/.config/transmission-daemon/torrent_complete.sh"看看有没有报错:比如脚本开头的shebang写错了(应该是
#!/bin/bash还是#!/usr/bin/env bash?路径不对会直接跑不起来),或者脚本里用的命令没装(比如用了ffmpeg但系统没装),还有尽量用绝对路径调用命令(比如/usr/bin/mv代替mv),避免Transmission的环境变量不全导致找不到命令。确认Transmission的配置是否真的生效了
修改settings.json后,必须重启Transmission daemon才能加载新配置:# systemd系统用这个 systemctl restart transmission-daemon # 非systemd用这个 service transmission-daemon restart另外要注意:有些系统里Transmission daemon可能加载的是/etc/transmission-daemon/settings.json,而不是用户目录下的。你可以用
ps aux | grep transmission-daemon看启动参数里的配置文件路径,确认你改的是对的那个。检查SELinux/AppArmor的限制
如果你的系统开了SELinux或者AppArmor,它们可能会阻止Transmission执行外部脚本:- SELinux可以临时关闭测试:
setenforce 0,然后完成一个种子下载,看脚本会不会跑。如果跑了,就需要给Transmission添加SELinux规则允许执行这个脚本。 - AppArmor的话,检查/etc/apparmor.d/usr.sbin.transmission-daemon文件,看有没有允许访问你的脚本路径,以及执行权限。
- SELinux可以临时关闭测试:
开启调试日志找线索
打开Transmission的调试日志,能看到脚本执行的细节。修改settings.json里的"log-level": "debug",重启daemon后,下载完成去看日志:- systemd系统用
journalctl -u transmission-daemon查看 - 其他系统可能在/var/log/transmission-daemon/目录下有日志文件
日志里会明确写有没有尝试调用脚本,以及执行失败的原因。
- systemd系统用
给脚本加日志输出
Transmission默认会把脚本的输出丢去/dev/null,你看不到错误。可以在脚本最开头加一行,把所有输出和错误写到日志文件里:exec > /var/lib/transmission/torrent_complete.log 2>&1记得先创建日志文件并给transmission用户权限:
touch /var/lib/transmission/torrent_complete.log && chown transmission:transmission /var/lib/transmission/torrent_complete.log这样脚本执行的所有细节都会存在日志里,方便排查。
内容的提问来源于stack exchange,提问作者Blurry Script

