如何用MikroTik /tool fetch不存文件上传图片变量至FTP并定时执行
问题解决:MikroTik脚本中转HTTP图片到FTP(不写入ROM)
你的核心需求是避免频繁写入ROM损坏设备,同时实现每分钟从HTTP拉取图片并上传FTP,原脚本无法工作的原因是**/tool fetch上传模式仅支持本地文件路径,不能直接传入内存变量**。以下是可行的解决方案:
核心思路
利用RouterOS的**内存临时目录(/tmp)**作为中转,这个目录存储在RAM中,写入操作不会损伤ROM,重启后自动清空,完全适配高频临时文件操作场景。
完整脚本实现
单步执行脚本
# 1. 从HTTP下载图片到内存临时文件 /tool fetch user="user" password="password" url="http://192.168.1.1/image.jpg" mode=http dst-path="/tmp/temp_image.jpg" # 2. 从内存临时文件上传至FTP /tool fetch address="my.ftp.com" src-path="/tmp/temp_image.jpg" user=ftpuser mode=ftp password=ftppassword dst-path="/ftpimage.jpg" upload=yes # 可选:删除临时文件(下次执行会自动覆盖,也可省略此步) /file remove "/tmp/temp_image.jpg"
添加每分钟调度器
将脚本加入调度器,实现自动周期性执行:
/system scheduler add name="ftp_image_uploader" interval=1m on-event=" /tool fetch user=\"user\" password=\"password\" url=\"http://192.168.1.1/image.jpg\" mode=http dst-path=\"/tmp/temp_image.jpg\" /tool fetch address=\"my.ftp.com\" src-path=\"/tmp/temp_image.jpg\" user=ftpuser mode=ftp password=ftppassword dst-path=\"/ftpimage.jpg\" upload=yes /file remove \"/tmp/temp_image.jpg\" " start-time=startup
关键说明
- 内存目录验证:如果设备中没有
/tmp目录,手动创建内存盘(根据图片大小调整容量):/disk add name=tmp type=ram size=1M - 变量限制规避:RouterOS脚本无法直接将内存中的二进制数据传入FTP上传命令,内存临时文件是目前唯一可行的无ROM写入中转方案。
- 调度器引号转义:调度器的
on-event参数是字符串,内部的双引号必须用反斜杠\"转义,否则会导致脚本解析错误。
内容的提问来源于stack exchange,提问作者alexbayker
相关产品推荐
相关产品推荐

