diff options
-rw-r--r-- | plugins/mod_posix.lua | 14 | ||||
-rw-r--r-- | util-src/pposix.c | 29 |
2 files changed, 33 insertions, 10 deletions
diff --git a/plugins/mod_posix.lua b/plugins/mod_posix.lua index 23757761..7461f237 100644 --- a/plugins/mod_posix.lua +++ b/plugins/mod_posix.lua @@ -42,7 +42,6 @@ if not config_get("*", "core", "no_daemonize") then if not ok then log("error", "Failed to daemonize: %s", ret); elseif ret and ret > 0 then - log("info", "Daemonized to pid %d", ret); os.exit(0); else if logwriter then @@ -51,7 +50,18 @@ if not config_get("*", "core", "no_daemonize") then log("error", "Couldn't set new log output: %s", ret); end end - log("info", "Successfully daemonized"); + log("info", "Successfully daemonized to PID %d", pposix.getpid()); + + local pidfile = config.get("*", "core", "pidfile"); + if pidfile then + local pf, err = io.open(pidfile, "w+"); + if not pf then + log("error", "Couldn't write pidfile; %s", err); + else + pf:write(tostring(pposix.getpid())); + pf:close(); + end + end end end module:add_event_hook("server-starting", daemonize_server); diff --git a/util-src/pposix.c b/util-src/pposix.c index eaf68a7b..6e7d250c 100644 --- a/util-src/pposix.c +++ b/util-src/pposix.c @@ -37,7 +37,7 @@ /* Daemonization support */ -static int daemonize(lua_State *L) +static int lc_daemonize(lua_State *L) { pid_t pid; @@ -147,7 +147,7 @@ int facility_constants[] = { */ char* syslog_ident = NULL; -int syslog_open(lua_State* L) +int lc_syslog_open(lua_State* L) { int facility = luaL_checkoption(L, 2, "daemon", &facility_strings); facility = facility_constants[facility]; @@ -179,7 +179,7 @@ int level_constants[] = { LOG_EMERG, -1 }; -int syslog_log(lua_State* L) +int lc_syslog_log(lua_State* L) { int level = luaL_checkoption(L, 1, "notice", &level_strings); level = level_constants[level]; @@ -190,7 +190,7 @@ int syslog_log(lua_State* L) return 0; } -int syslog_close(lua_State* L) +int lc_syslog_close(lua_State* L) { closelog(); if(syslog_ident) @@ -201,21 +201,34 @@ int syslog_close(lua_State* L) return 0; } +/* getpid */ + +int lc_getpid(lua_State* L) +{ + lua_pushinteger(L, getpid()); + return 1; +} + +/* Register functions */ + int luaopen_util_pposix(lua_State *L) { lua_newtable(L); - lua_pushcfunction(L, daemonize); + lua_pushcfunction(L, lc_daemonize); lua_setfield(L, -2, "daemonize"); - lua_pushcfunction(L, syslog_open); + lua_pushcfunction(L, lc_syslog_open); lua_setfield(L, -2, "syslog_open"); - lua_pushcfunction(L, syslog_close); + lua_pushcfunction(L, lc_syslog_close); lua_setfield(L, -2, "syslog_close"); - lua_pushcfunction(L, syslog_log); + lua_pushcfunction(L, lc_syslog_log); lua_setfield(L, -2, "syslog_log"); + lua_pushcfunction(L, lc_getpid); + lua_setfield(L, -2, "getpid"); + return 1; }; |