You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

群晖DSM任务计划程序手动与定时执行speedtest-cli脚本行为差异排查

解决DSM定时任务中speedtest-cli --csv无法正常执行的问题

手动执行脚本正常,但DSM定时任务中speedtest-cli --csv无法写入数据,核心差异在于定时任务与手动执行的运行环境不同,以下是具体原因和修复方案:

1. 环境变量PATH差异

定时任务的默认PATH范围远窄于手动登录会话,speedtest-cli作为Python脚本,可能依赖的系统命令(如Python解释器)不在定时任务的PATH中,导致执行失败。

修复方案

在脚本开头手动指定完整的环境变量,或者直接使用Python的绝对路径调用speedtest-cli:

# 手动设置完整PATH,确保所有依赖命令可被找到
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 或提前通过手动执行`which python`找到绝对路径,替换下方的/usr/bin/python
/usr/bin/python "$WD/speedtest-cli/speedtest-cli" --csv >> "$DataFile"

2. 脚本语法错误(隐藏触发)

你的脚本中if [ ! -f $DataFile ]then存在语法问题:then前缺少分号或空格,正确写法应为if [ ! -f $DataFile ]; then。手动执行时bash可能容错通过,但定时任务的bash环境更严格,可能导致后续命令中断。

修复方案

修正if语句的语法,同时给路径变量添加引号,避免路径含空格时出错:

if [ ! -f "$DataFile" ]; then
    # 后续逻辑
fi

3. 网络访问或权限限制

DSM定时任务的进程可能存在网络访问限制(如执行时机NAS网络未完全就绪、防火墙策略限制),导致speedtest-cli无法连接测速服务器。

修复方案

在脚本中添加错误日志,记录speedtest-cli的执行细节:

# 将错误输出写入单独日志,便于排查
$WD/speedtest-cli/speedtest-cli --csv --debug >> "$DataFile" 2>> "$WD/error.log"

通过查看error.log可以直接获取测速失败的具体原因(如无法解析节点、网络超时等)。

修正后的完整脚本

#!/bin/bash
# 手动设置环境变量,确保依赖命令可访问
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

printf -v date '%(%Y-%m-%d %H:%M:%S)T' -1 
WD=$(/bin/dirname "$0")
echo "${date}" >> "$WD/log.txt"
DataFile="$WD/data.csv"

# 修正if语句语法
if [ ! -f "$DataFile" ]; then
          echo "    DataFile (csv-header):  ${DataFile}" >> "$WD/log.txt"
          /usr/bin/python "$WD/speedtest-cli/speedtest-cli" --csv-header > "$DataFile"
          echo "   - Header geschrieben" >> "$WD/log.txt"
fi

echo "    DataFile (csv):  ${DataFile}" >> "$WD/log.txt"
# 执行测速并记录错误日志
/usr/bin/python "$WD/speedtest-cli/speedtest-cli" --csv >> "$DataFile" 2>> "$WD/error.log"
echo "   - Daten geschrieben" >> "$WD/log.txt"

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:17:24