diff options
| author | ruki <[email protected]> | 2022-04-05 23:25:24 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-05 23:25:24 +0800 |
| commit | 94dfcf46a3393392b83727cba39cf8639e9c3470 (patch) | |
| tree | f6b5bd9fb5c450a18640a2e9afe52e736610489b | |
| parent | 7b11db21f6dac2ddb5fa74c510cfa8e45eb99c49 (diff) | |
write daemon logs
| -rw-r--r-- | xmake/modules/private/service/remote_build_server.lua | 11 | ||||
| -rw-r--r-- | xmake/modules/private/service/server.lua | 10 | ||||
| -rw-r--r-- | xmake/modules/private/service/service.lua | 8 | ||||
| -rw-r--r-- | xmake/modules/private/service/start_service.lua | 11 |
4 files changed, 30 insertions, 10 deletions
diff --git a/xmake/modules/private/service/remote_build_server.lua b/xmake/modules/private/service/remote_build_server.lua index c6c7d1d2c..4e3aa005b 100644 --- a/xmake/modules/private/service/remote_build_server.lua +++ b/xmake/modules/private/service/remote_build_server.lua @@ -27,8 +27,11 @@ local remote_build_server = remote_build_server or server() local super = remote_build_server:class() -- init server -function remote_build_server:init() - super.init(self) +function remote_build_server:init(daemon) + super.init(self, daemon) + if self:daemon() then + config.load() + end local listen = assert(config.get("remote_build.server.listen"), "config(remote_build.server.listen): not found!") super.listen_set(self, listen) super.handler_set(self, self.handler) @@ -48,8 +51,8 @@ function remote_build_server:__tostring() return "<remote_build_server>" end -function main() +function main(daemon) local instance = remote_build_server() - instance:init() + instance:init(daemon ~= nil) return instance end diff --git a/xmake/modules/private/service/server.lua b/xmake/modules/private/service/server.lua index 5c313baa8..56441ef30 100644 --- a/xmake/modules/private/service/server.lua +++ b/xmake/modules/private/service/server.lua @@ -27,7 +27,13 @@ import("core.base.scheduler") local server = server or object() -- init server -function server:init() +function server:init(daemon) + self._DAEMON = daemon +end + +-- is daemon? +function server:daemon() + return self._DAEMON end -- set handler @@ -64,6 +70,7 @@ function server:runloop() local sock = socket.bind(self:addr(), self:port()) sock:listen(100) print("%s: listening %s:%d ..", self, self:addr(), self:port()) + io.flush() while true do local sock_client = sock:accept() if sock_client then @@ -73,6 +80,7 @@ function server:runloop() end, sock_client) end end + io.flush() sock:close() end diff --git a/xmake/modules/private/service/service.lua b/xmake/modules/private/service/service.lua index 719cc8b0a..77fcc4210 100644 --- a/xmake/modules/private/service/service.lua +++ b/xmake/modules/private/service/service.lua @@ -23,14 +23,14 @@ import("core.base.option") import("core.base.scheduler") import("private.service.remote_build_server") -function _start_remote_build_server() - remote_build_server():runloop() +function _start_remote_build_server(...) + remote_build_server(...):runloop() end -function main() +function main(...) local starters = {_start_remote_build_server} for _, start_server in ipairs(starters) do - scheduler.co_start(start_server) + scheduler.co_start(start_server, ...) end end diff --git a/xmake/modules/private/service/start_service.lua b/xmake/modules/private/service/start_service.lua index fca698bf0..f02b7f222 100644 --- a/xmake/modules/private/service/start_service.lua +++ b/xmake/modules/private/service/start_service.lua @@ -20,6 +20,7 @@ -- imports import("core.base.option") +import("private.service.config") import("private.service.service") function main(opt) @@ -33,7 +34,15 @@ function main(opt) table.insert(argv, "-D") end table.insert(argv, "private.service.service") - os.execv(os.programfile(), argv, {detach = true}) + table.insert(argv, "--daemon") + local logfile = config.get("logfile") + if logfile then + local logdir = path.directory(logfile) + if not os.isdir(logdir) then + os.mkdir(logdir) + end + end + os.execv(os.programfile(), argv, {detach = true, stdout = logfile, stderr = logfile}) else service() end |
