|
|
@@ -0,0 +1,76 @@ |
|
|
|
local serial = require "serialization" |
|
|
|
|
|
|
|
local rc = {} |
|
|
|
local service = {} |
|
|
|
local cfg = {} |
|
|
|
cfg.enabled = {} |
|
|
|
|
|
|
|
local function loadConfig() |
|
|
|
local f = io.open("/boot/cfg/rc.cfg","rb") |
|
|
|
if not f then return false end |
|
|
|
cfg = serial.unserialize(f:read("*a")) or {} |
|
|
|
f:close() |
|
|
|
cfg.enabled = cfg.enabled or {} |
|
|
|
return true |
|
|
|
end |
|
|
|
local function saveConfig() |
|
|
|
local f = io.open("/boot/cfg/rc.cfg","wb") |
|
|
|
if not f then return false end |
|
|
|
f:write(serial.serialize(cfg)) |
|
|
|
f:close() |
|
|
|
return true |
|
|
|
end |
|
|
|
|
|
|
|
function rc.load(name,force) |
|
|
|
if force then |
|
|
|
rc.stop(name) |
|
|
|
service[name] = nil |
|
|
|
end |
|
|
|
if service[name] then return true end |
|
|
|
service[name] = setmetatable({},{__index=_G}) |
|
|
|
local f = io.open("/boot/service/"..name..".lua","rb") |
|
|
|
local res = load(f:read("*a"),name,"t",service[name])() |
|
|
|
f:close() |
|
|
|
return res |
|
|
|
end |
|
|
|
|
|
|
|
function rc.stop(name,...) |
|
|
|
if not service[name] then return false, "service not found" end |
|
|
|
service[name].stop(...) |
|
|
|
end |
|
|
|
|
|
|
|
function rc.start(name,...) |
|
|
|
rc.load(name) |
|
|
|
if not service[name] then return false, "service not found" end |
|
|
|
return service[name].start(...) |
|
|
|
end |
|
|
|
|
|
|
|
function rc.restart(name) |
|
|
|
rc.stop(name) |
|
|
|
rc.start(name) |
|
|
|
end |
|
|
|
|
|
|
|
function rc.enable(name) |
|
|
|
for k,v in pairs(cfg.enabled) do |
|
|
|
if v == name then return false end |
|
|
|
end |
|
|
|
saveConfig() |
|
|
|
end |
|
|
|
function rc.disable(name) |
|
|
|
local disabled = false |
|
|
|
for k,v in pairs(cfg.enabled) do |
|
|
|
if v == name then table.remove(cfg.enabled,k) disabled = true break end |
|
|
|
end |
|
|
|
saveConfig() |
|
|
|
return disabled |
|
|
|
end |
|
|
|
|
|
|
|
loadConfig() |
|
|
|
|
|
|
|
for k,v in pairs(cfg.enabled) do |
|
|
|
rc.start(v) |
|
|
|
end |
|
|
|
|
|
|
|
_G.service = service |
|
|
|
|
|
|
|
return rc |