summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-05 23:25:24 +0800
committerruki <[email protected]>2022-04-05 23:25:24 +0800
commit94dfcf46a3393392b83727cba39cf8639e9c3470 (patch)
treef6b5bd9fb5c450a18640a2e9afe52e736610489b
parent7b11db21f6dac2ddb5fa74c510cfa8e45eb99c49 (diff)
write daemon logs
-rw-r--r--xmake/modules/private/service/remote_build_server.lua11
-rw-r--r--xmake/modules/private/service/server.lua10
-rw-r--r--xmake/modules/private/service/service.lua8
-rw-r--r--xmake/modules/private/service/start_service.lua11
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