Crontab执行调用wget的Python脚本时日志产生大量重复行如何解决?
问题原因
wget的进度条输出逻辑会根据运行环境自动调整:
- 检测到当前是交互式终端(tty)环境时,默认输出带回车符
\r的动态进度条,所有进度更新都在同一行刷新,不会产生多行冗余内容 - crontab属于非交互式无tty环境,wget无法检测到终端,会自动切换为点式进度输出,每下载固定大小的数据就换行打印一次进度,最终导致日志文件快速膨胀
解决方案
下面是几种可直接落地的方案,可根据自身需求选择:
方案1:给wget命令指定进度条模式(保留进度查看能力,无冗余日志)
在Python脚本调用wget的命令中添加--progress=bar:force:noscroll参数,强制wget在非tty环境下也使用动态回车进度条:
wget --progress=bar:force:noscroll [你的下载链接]
该方案的效果和手动执行完全一致:
- 日志中只会存储带
\r的进度更新内容,不会产生大量换行 - 用
tail -f查看日志时,终端会自动解析\r实现同一行刷新进度的效果
方案2:简化wget输出(不需要实时进度时选择)
如果不需要在日志里查看实时下载进度,只需要记录下载结果/错误信息,可以给wget添加简化输出参数:
- 仅打印错误、下载开始/结束信息,不输出进度:添加
-nv(即--no-verbose)参数 - 完全关闭wget的所有输出,只保留自定义脚本的打印内容:添加
-q(即--quiet)参数
方案3:附加的日志轮转配置
如果日志长期写入担心占用空间,可以配置logrotate定期轮转/home/user/downloader.log,避免单文件过大。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

