fileboy,文件变更监听通知系统,使用 Go 编写。

适用于 Hot Reload (典型的如开发go项目,无需每次手动执行 go build;又比如前端 node 打包) 或者 系统监控的场景。

v1.9 版本更新日志:

  • 优化 文件夹监听效率,减少大量深层文件夹遍历的时间
  • 优化 代码逻辑
  • 增加 readme 英文说明
  • 修复 偶现监听项目主目录无效的问题
  • 增加 includeDirs 参数规则验证
  • 修改 delayMillSecond 默认值,2000
  • 修复 time 内存
  • 修复 某些情况下cmd异常导致进程挂掉的问题
  • 修复 http 通知失败导致进程崩溃
  • 优化 log

下载(Giteee源): Windows   |    Linux    |    Darwin

下载(Github源): Windows   |    Linux    |    Darwin

特性

  • 极简的用法和配置

  • 支持多平台,Windows/Linux/MacOS

  • 支持自定义文件监听范围,监听指定文件夹/不监听指定文件夹/指定后缀文件

  • 支持设置多条命令

  • 命令支持变量占位符

  • 支持冗余任务丢弃,自定义冗余任务范围

  • 支持 http 通知

  • 更多...

编译环境

go version 1.12

更新日志

CHANGELOG

运行

下载已经编译好的对应平台二进制文件,重命名为fileboy, 加入系统 Path 中即可。

源码编译

clone 该项目,进入主目录,运行命令:

## 安装依赖
go get -u gopkg.in/fsnotify/fsnotify.v1
go get -u gopkg.in/yaml.v2
## 编译
go build
## 运行
./fileboy

使用

fileboy 的正常运行依赖于 filegirl.yaml 配置,所以首次在项目中使用需要初始化 filegirl.yaml

  • 进入你想要 hot reload 的项目主目录下;

  • 运行 fileboy init,会在该目录下生成 filegirl.yaml文件;

  • 查看 filegirl.yaml,修改为适合自己项目的配置项;

  • 运行 fileboy即可.

    如果你定义了 command -> exec命令,想事先确认是否能正常执行,可以运行 fileboy exec命令,系统会尝试运行你的自定义命令。

你可以使用 fileboy help查看使用帮助。

filegirl.yaml 配置文件说明

# 主配置
core:# 配置版本号version: 1# 监控配置
monitor:# 要监听的目录# test1       监听当前目录下 test1 目录# test1/test2 监听当前目录下 test1/test2 目录# test1,*     监听当前目录下 test1 目录及其所有子目录(递归)# .,*         监听当前目录及其所有子目录(递归)includeDirs:- .,*# 不监听的目录# .idea   忽略.idea目录及其所有子目录的监听exceptDirs:- .idea- .git- .vscode- node_modules- vendor# 监听文件的格式,此类文件更改会执行 command 中的命令# .go   后缀为 .go 的文件更改,会执行 command 中的命令# .*    所有的文件更改都会执行 command 中的命令types:- .go# 命令
command:# 监听的文件有更改会执行的命令# 可以有多条命令,会依次执行# 如有多条命令,每条命令都会等待上一条命令执行完毕后才会执行# 如遇交互式命令,允许外部获取输入# 支持变量占位符,运行命令时会替换成实际值:#    {{file}}    文件名(如 a.txt 、test/test2/a.go)#    {{ext}}     文件后缀(如 .go)#    {{changed}} 文件更新的本地时间戳(纳秒,如 1537326690523046400)# 变量占位符使用示例:cp {{file}} /root/sync -rf  、 myCommand --{{ext}} {{changed}}exec:- go version- go env# 文件变更后命令会在xx毫秒后才会执行,单位为毫秒# 一个变更事件(A)如果在定义的延迟时间(t)内,又有新的文件变更事件(B),那么A会取消执行。# B及以后的事件均依次类推,直到事件Z在t内没有新事件产生,Z 会执行# 合理设置延迟时间,将有效减少冗余和重复任务的执行# 如果不需要该特性,设置为 0delayMillSecond: 2000# 通知器
notifier:# 文件更改会向该 url 发送请求(POST 一段 json 文本数据)# 触发请求的时机和执行 command 命令是一致的# 请求超时 15 秒# POST 格式:#    Content-Type: application/json;charset=UTF-8#    User-Agent: FileBoy Net Notifier v1.9#    Body: {"project_folder":"/watcher-dirs","file":"test.go","changed":1546421173070433800,"ext":".go"}# 例: http://example.com/notifier/fileboy-listener# 不启用通知,请留空callUrl: ""

QA

很多框架都自带了 hot reload 的功能,为什么还要单独写个 fileboy 呢?

这个是一款通用的 hot reload 的软件,理论上适用于任何需要 hot reload 的场景,并不局限于语言层面上。只要灵活的配置 filegirl.yaml文件就行了。

fileboy 可以应用在那些具体的场景?

在开发中,我们很需要一款可以帮助我们自动打包编译的工具,那 fileboy 就非常适合这样的场景。比如 go 项目的热编译,让我们可以边修改代码边运行得到反馈。又比如 PHP Swoole 框架,由于常驻进程的原因,无法更改代码立即reload,使用 fileboy 就可以辅助做到传统 PHP 开发的体验。

对于一些需要监控文件日志或者配置变动的场景, fileboy 同样适合。你可以事先编写好相应的通知报警脚本,然后定义filegirl.yaml中的command命令,交由 fileboy 自动运行监控报警。

通知器在什么时候会发送 http 请求 ?

通知器发送 http 通知的前提是在配置文件中设置了 callUrl 参数(不为空即为已设置)。触发请求的时机和执行 command 命令是一致的,command -> delayMillSecond 参数对于触发器同样有效。请求超时默认15秒.

idea 下更改文件,为什么会执行两次或者多次 command ?

由于 idea 系列软件特殊的文件保存策略,他会自动创建一些临时文件,并且在需要时多次重写文件,所以有时反映在文件上就是有多次的更改,所以会出现这种情况。1.5版本增加了 delayMillSecond 参数,可以解决这个问题。

filegirl.yaml 里面的 command 不支持复杂的命令吗?

对于“很复杂的命令”这种说法很难去定义,比如 echo "hello world"并不复杂,但是对于 fileboy 来讲,目前无法解析这种命令。

fileboy 目前支持 命令 + 参数这种形式的 command,而且 参数中不能有""符号或者有空格。如:

go build:支持;

go env:支持;

php swoole start --daemon:支持

cat a.txt | grep "q" | wc -l:不支持

对于不支持的命令,可以把它写到一个文件里,然后在 command 中执行这个文件来解决。

fileboy v1.9 发布,文件变更监听通知系统相关推荐

  1. spring 文件变化监听_Spring新变化

    spring 文件变化监听 让我们检查一下Spring社区在前几天发布的一些新版本: Spring Boot 1.0.0.RC1 Spring很高兴地宣布Spring Boot v1.0.0的第一个候 ...

  2. 跟我一起学.NetCore之配置变更监听

    前言 通常程序中配置少不了,配置的修改也避免不了,配置的热更新为此给应用程序带来很大的便捷,不用重启,提高用户体验:但往往有时候需要对修改进行审计,也就是需要记录,有时候也会针对配置修改的时候触发相关 ...

  3. .NET Core开发实战(第12课:配置变更监听)--学习笔记

    12 | 配置变更监听:配置热更新能力的核心 这一节讲解如何使用代码来监视配置变化并做出一些动作 当我们需要追踪配置发生的变化,可以在变化发生时执行一些特定的操作 配置主要提供了一个 GetReloa ...

  4. vue输入框输入触发事件_.vue文件中监听input输入事件oninput详解

    .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件, ...

  5. 文件夹监听FileListener

    文件夹监听FileListener 需要实现一个功能,监听某一个文件夹,当该文件夹有任何改动时(新增文件.删除文件),能够实时的获取到这条信息. package com.example.demo.mo ...

  6. vue输入框输入触发事件_详解.vue文件中监听input输入事件(oninput)

    详解.vue文件中监听input输入事件(oninput) .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变 ...

  7. 2020-12-04使用retrofit上传下载文件,监听下载进度

    retrofit2上传.下载文件 一.上传文件 1.使用表单上传文件:结合Rxjava 先定义ApiService接口 @Multipart //Multipart表单 @POST("{ur ...

  8. js下载文件并监听下载进度

    需求是做一个根据文件的url地址下载文件的功能,但是对于大文件来说下载周期较长,等待时间页面无反应,体验不够好,这时候就需要获取到文件的下载进度.查阅了相关资料,这里做一些记录. /** * 将url ...

  9. Retrofit下载大文件、监听进度、断点续传

    前些天有个同学问我会不会使用Retrofit下载大文件,我就给了他我项目中使用的方法.发现有很多人还不会用Retrofit实现下载文件,即使会下载,也可能会出现问题,比如:不知道如何获取进度:一旦下载 ...

  10. oracle 双结点监听文件,RAC监听服务两个节点 只能起一个

    我的问题是, RAC系统有两个节点, endpoints_listener和istener 配置如下: node1: LISTENER_DB1=(DESCRIPTION=(ADDRESS_LIST=( ...

最新文章

  1. c++将小数化为二进制_C++版进制转换(十进制,二进制,十六进制整数和小数)
  2. 未解决oracle错误12505、01034、27101
  3. 【PP生产订单】入门介绍(四)
  4. Feign-2覆写Feign的默认配置
  5. 干趴面试官系列 | 请你简述一下Kafka中的分区分配
  6. 距离向量算法_阿里北大:深度哈希算法最新综述
  7. ASP.NET : Kerberos网络认证过程
  8. (8)css常用样式属性3
  9. vc++6.0工具栏自绘按钮程序
  10. 微信支付服务商,可视化进件特约商户
  11. 认证授权那点事儿 —— OAuth 2.0
  12. jwt-auth官方文档
  13. [share]深入探讨PHP中的内存管理问题
  14. 超融合和服务器关系_超融合服务器和超融合一体机有什么区别
  15. C语言经典例题及答案3
  16. SAP所有模块用户出口(User Exits) 一
  17. navicat连接mysql忘记密码_navicat忘记密码怎么办
  18. 认知机器人:相机校准
  19. =,==,===的区别
  20. 西南石油大学计算机考研人数,8所高校报考人数汇总,21考研这是要妥妥突破400万人的节奏?...

热门文章

  1. Atiitt 提升复用性之道 项目成本之道 Atitit 代码复用的理解attilax总结 1. 复用分类 1 1.1. 类库侧重代码重用,框架侧重设计重用 2 2. 文档与索引体系 2 3
  2. Atitit atitit 编程语言之道补充 s22 attilax 艾龙 著 1. 程序设计是个什么概念呢?历史发展 1 1.1. 连接电缆 2 1.2. 程序内置纸带打点 2 1.3. FORT
  3. Atitit usrQBM2331 参数格式化规范
  4. paip.输入法编程--词频调整原则--发音长度优先
  5. paip.提升用户体验---网站程序HTML,JS需要注意的地方
  6. 摘要算法、对称加密、非对称加密、数字签名、数字证书浅析
  7. 从毫无交集到走向融合,AI+区块链才是改变世界的黑科技!
  8. (转)币圈人物志 BM(EOS,BTS,Steem缔造者)
  9. 如何应对容器和云原生时代的安全挑战?
  10. 号外!德国惊现大罢工--要求每周上班28小时