--- xeno-unstable.bk/tools/misc/xend 2004-09-09 15:34:50.000000000 -0600 +++ xeno-unstable.bk.new/tools/misc/xend 2004-09-17 04:40:15.000000000 -0600 @@ -8,11 +8,12 @@ Provides console server and HTTP management api. Run: - xend start - The daemon is stopped with: + Restart: + xend restart + The daemon is stopped with: xend stop The daemon should reconnect to device control interfaces @@ -107,6 +108,8 @@ return daemon.stop() elif sys.argv[1] == 'restart': return daemon.stop() or daemon.start() + elif sys.argv[1] == 'status': + return daemon.status() else: print 'not an option:', sys.argv[1] return 1 --- xeno-unstable.bk/tools/python/xen/xend/server/SrvDaemon.py 2004-09-09 15:34:50.000000000 -0600 +++ xeno-unstable.bk.new/tools/python/xen/xend/server/SrvDaemon.py 2004-09-17 12:20:48.000000000 -0600 @@ -42,7 +42,7 @@ import domain from params import * -DEBUG = 1 +DEBUG = 0 class NotifierProtocol(protocol.Protocol): """Asynchronous handler for i/o on the notifier (event channel). @@ -419,6 +419,18 @@ self.cleanup_xend(kill=kill) self.cleanup_xfrd(kill=kill) + def status(self): + """Returns the status of the xend and xfrd daemons. + The return value is defined by the LSB: + 0 Running + 3 Not running + """ + if (self.cleanup_process(XEND_PID_FILE, "xend", False) == 0 or + self.cleanup_process(XFRD_PID_FILE, "xfrd", False) == 0): + return 3 + else: + return 0 + def install_child_reaper(self): #signal.signal(signal.SIGCHLD, self.onSIGCHLD) # Ensure that zombie children are automatically reaped. @@ -451,22 +463,36 @@ pass else: # Child - self.set_user() os.execl("/usr/sbin/xfrd", "xfrd") def start(self, trace=0): + """Attempts to start the daemons. + The return value is defined by the LSB: + 0 Success + 4 Insufficient privileges + """ xend_pid = self.cleanup_xend() xfrd_pid = self.cleanup_xfrd() - if xfrd_pid == 0: - self.start_xfrd() - if xend_pid > 0: - return 1 # Detach from TTY. if not DEBUG: os.setsid() + sys.stdin.close(); + sys.stdout.close(); + sys.stderr.close(); + os.close(0); + os.close(1); + os.close(2); if self.set_user(): - return 1 + return 4 + os.chdir("/") + + if xfrd_pid == 0: + self.start_xfrd() + if xend_pid > 0: + # Trying to run an already-running service is a success. + return 0 + self.install_child_reaper() if self.fork_pid(XEND_PID_FILE): --- xeno-unstable.bk/tools/examples/init.d/xend 2004-09-16 09:41:43.000000000 -0600 +++ xeno-unstable.bk.new/tools/examples/init.d/xend 2004-09-17 12:19:05.000000000 -0600 @@ -10,15 +10,15 @@ case "$1" in start) xend start - exit $? ;; stop) xend stop - exit $? ;; status) + xend status ;; restart|reload) + xend restart ;; *) # do not advertise unreasonable commands that there is no reason @@ -27,5 +27,5 @@ exit 1 esac -exit 0 +exit $?