求助:基于wget/curl实现数据记录仪每日定时自动下载脚本
优化后的自动适配日期下载脚本
下面是调整后的脚本,解决了日期硬编码问题,并修正了可能导致mirror功能失效的核心问题:
#!/bin/bash # 重定向输出到日志文件,同时保留控制台输出 exec > >(tee -i update_logfile.txt) exec 2>&1 # 生成符合目标格式的日期字符串:两位年+两位月+两位日(例如240615) target_date=$(date +'%y%m%d') printf "Record load started: %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" # 目标文件的FTP路径和本地保存目录 ftp_url="ftp://192.168.30.240/data/${target_date}/int_magnetek_${target_date}.txt" local_dir="/home/username/upload" echo "Attempting to download file: ${ftp_url}" # 使用wget增量下载,仅当远程文件更新时才重新获取 wget -N --user='username' --password='password' "${ftp_url}" -P "${local_dir}" # 检查下载结果并记录日志 if [ $? -eq 0 ]; then echo "File downloaded successfully to ${local_dir}" else echo "ERROR: Failed to download target file" fi
关键修改说明
- 日期自动适配:用
date +'%y%m%d'生成匹配目标格式的日期字符串,彻底替代原脚本中硬编码的日期值,实现每日自动对应目标文件夹和文件名。 - 补充FTP协议前缀:原脚本URL缺少
ftp://前缀,wget默认会以HTTP协议访问,这是mirror功能失效的核心原因。补上前缀后才能正确对接数据记录仪的FTP服务。 - 精简下载参数:移除冗余的
-m(递归镜像)参数,因为你仅需单个文件而非整个目录;保留-N参数实现增量下载,避免10分钟周期内重复下载无变化的文件。 - 增加结果校验:通过
$?判断wget执行状态,在日志中明确记录下载成功/失败信息,便于排查问题。
定时任务设置(每10分钟执行一次)
编辑crontab配置:
crontab -e
添加以下内容(替换为你的脚本实际路径):
*/10 * * * * /absolute/path/to/your/download_script.sh
保存退出后,crontab会自动加载新任务,脚本将每10分钟自动执行一次。
注意事项
- 确保运行脚本的服务器系统日期与数据记录仪的日期完全同步,否则会出现找不到对应日期文件夹的情况。
- 如果数据记录仪的FTP服务要求被动模式,可在wget命令中添加
--passive-ftp参数。 - 定期清理
update_logfile.txt日志文件,避免文件过大占用磁盘空间。
内容的提问来源于stack exchange,提问作者JX1974
相关产品推荐
相关产品推荐

