qBittorrent-nox执行自定义外部shell脚本无响应问题排查求助
这种情况大概率是环境变量差异或者脚本执行上下文的问题,我给你列几个实用的排查方向:
用绝对路径调用脚本:qBittorrent-nox作为服务类程序,默认的PATH环境变量可能很有限,未必包含
/usr/local/bin。试试在qBittorrent的配置里直接写脚本的完整路径:/usr/local/bin/movefile "%F",而不是只写movefile "%F"——找不到脚本路径是最常见的坑。给脚本加上shebang头:你的脚本有没有在最开头加上
#!/bin/bash?如果没加,qBittorrent可能会用系统默认的sh来执行,虽然这个脚本逻辑简单,但不同shell的行为差异也可能导致执行失败。修改后的脚本应该是:#!/bin/bash path=$1 mv "$path" "$path-copy"添加日志捕获执行细节:给脚本加上日志输出,就能直观看到脚本是否被调用、有没有报错。比如修改脚本为:
#!/bin/bash # 日志输出到临时文件,方便排查 echo "脚本启动时间: $(date)" >> /tmp/movefile_debug.log echo "收到的参数路径: $1" >> /tmp/movefile_debug.log # 把mv的输出和错误都写入日志 mv "$1" "$1-copy" >> /tmp/movefile_debug.log 2>&1 echo "脚本结束时间: $(date)" >> /tmp/movefile_debug.log完成一次下载后查看
/tmp/movefile_debug.log:如果日志没生成,说明脚本根本没被调用;如果有日志,就能看到mv命令是否有权限问题、路径是否正确。检查安全机制限制:部分系统开启了SELinux或AppArmor,可能会限制qBittorrent调用外部脚本。可以临时关闭试试(比如执行
sudo setenforce 0),如果关闭后脚本能正常运行,再去配置对应的安全规则放行脚本的调用。验证参数传递的引号处理:如果下载文件的路径包含空格,qBittorrent的参数引号处理可能出问题。试试把命令改成
/usr/local/bin/movefile '%F',或者在脚本里用"$@"代替$1(虽然你只需要第一个参数,但这种写法能更稳妥地接收带空格的路径)。
我之前碰到过几乎一模一样的问题,就是因为服务的PATH没包含自定义目录,换成绝对路径调用就解决了。你先从这几个方向排查看看!
备注:内容来源于stack exchange,提问作者Jim

