hanxi / blog

涵曦的博客
https://blog.hanxi.cc
56 stars 5 forks source link

使用信号给 skynet 发消息 #75

Open hanxi opened 3 years ago

hanxi commented 3 years ago

skynet 只支持接收一个 SIGHUP 信号,该信号默认是用来切割日志文件的,跟 nginx 切割日志文件的方式一样。

nginx 支持比较多的信号,比如用于 reload 的 SIGHUP 和切割日志的 SIGUSR1 。

如果想用信号控制 skynet ,比如执行安全关服, skynet issues 里只讨论了可以重写一个自定义的日志服务来使用信号 SIGHUP 来安全关服。

那如果想要使用信号同时控制安全关服和切割日志该如何处理呢?

我想了个方案,重写一个自定义的日志服务,处理信号 SIGHUP 的逻辑,依靠一个文件的内容来区分信号想要传递的具体信息。这样想要支持什么消息都可以很简单的扩展了,比如文件内容写 reload 表示重新加载服务,cutlog 表示切割日志。可以先把指令写入文件,再调用 kill -1 命令。

这套机制实现代码见 https://github.com/hanxi/wlua/blob/main/service/log.lua