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