daemon: Use a master script to start node services.
This helps starting services with dependencies by running service start commands serially.
This commit is contained in:
parent
002f9aee76
commit
15adf81954
1 changed files with 16 additions and 18 deletions
|
@ -217,6 +217,7 @@ class CoreServices(ConfigurableManager):
|
||||||
'''
|
'''
|
||||||
services = sorted(node.services,
|
services = sorted(node.services,
|
||||||
key=lambda service: service._startindex)
|
key=lambda service: service._startindex)
|
||||||
|
script = '#!/bin/sh\n\n'
|
||||||
for s in services:
|
for s in services:
|
||||||
if len(str(s._starttime)) > 0:
|
if len(str(s._starttime)) > 0:
|
||||||
try:
|
try:
|
||||||
|
@ -227,15 +228,17 @@ class CoreServices(ConfigurableManager):
|
||||||
continue
|
continue
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
self.bootnodeservice(node, s, services)
|
script += self.bootnodeservice(node, s, services)
|
||||||
|
filename = 'start-all-services.sh'
|
||||||
|
node.nodefile(filename, script)
|
||||||
|
node.cmd(('/bin/sh', filename), wait = False)
|
||||||
|
|
||||||
def bootnodeservice(self, node, s, services):
|
def bootnodeservice(self, node, s, services):
|
||||||
''' Start a service on a node. Create private dirs, generate config
|
''' Start a service on a node. Create private dirs, generate config
|
||||||
files, and execute startup commands.
|
files, and execute startup commands.
|
||||||
'''
|
'''
|
||||||
if s._custom:
|
if s._custom:
|
||||||
self.bootnodecustomservice(node, s, services)
|
return self.bootnodecustomservice(node, s, services)
|
||||||
return
|
|
||||||
if node.verbose:
|
if node.verbose:
|
||||||
node.info("starting service %s (%s)" % (s._name, s._startindex))
|
node.info("starting service %s (%s)" % (s._name, s._startindex))
|
||||||
for d in s._dirs:
|
for d in s._dirs:
|
||||||
|
@ -247,12 +250,10 @@ class CoreServices(ConfigurableManager):
|
||||||
for filename in s.getconfigfilenames(node.objid, services):
|
for filename in s.getconfigfilenames(node.objid, services):
|
||||||
cfg = s.generateconfig(node, filename, services)
|
cfg = s.generateconfig(node, filename, services)
|
||||||
node.nodefile(filename, cfg)
|
node.nodefile(filename, cfg)
|
||||||
for cmd in s.getstartup(node, services):
|
startup = '\n'.join(s.getstartup(node, services))
|
||||||
try:
|
if startup:
|
||||||
# NOTE: this wait=False can be problematic!
|
startup += '\n'
|
||||||
node.cmd(shlex.split(cmd), wait = False)
|
return startup
|
||||||
except Exception, e:
|
|
||||||
node.warn("error starting command %s: %s" % (cmd, e))
|
|
||||||
|
|
||||||
def bootnodecustomservice(self, node, s, services):
|
def bootnodecustomservice(self, node, s, services):
|
||||||
''' Start a custom service on a node. Create private dirs, use supplied
|
''' Start a custom service on a node. Create private dirs, use supplied
|
||||||
|
@ -283,14 +284,11 @@ class CoreServices(ConfigurableManager):
|
||||||
"error copying service file '%s': %s" % (filename, e))
|
"error copying service file '%s': %s" % (filename, e))
|
||||||
continue
|
continue
|
||||||
node.nodefile(filename, cfg)
|
node.nodefile(filename, cfg)
|
||||||
|
startup = '\n'.join(s._startup)
|
||||||
for cmd in s._startup:
|
if startup:
|
||||||
try:
|
startup += '\n'
|
||||||
# NOTE: this wait=False can be problematic!
|
return startup
|
||||||
node.cmd(shlex.split(cmd), wait = False)
|
|
||||||
except Exception, e:
|
|
||||||
node.warn("error starting command %s: %s" % (cmd, e))
|
|
||||||
|
|
||||||
def copyservicefile(self, node, filename, cfg):
|
def copyservicefile(self, node, filename, cfg):
|
||||||
''' Given a configured service filename and config, determine if the
|
''' Given a configured service filename and config, determine if the
|
||||||
config references an existing file that should be copied.
|
config references an existing file that should be copied.
|
||||||
|
|
Loading…
Add table
Reference in a new issue