mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
bitkeeper revision 1.1159.79.1 (414b5fab__RjPaRIcKFGQmiG7K6ggA)
SrvDaemon.py, xend: Xend daemonization fixes from Charles Coffing.
This commit is contained in:
1 parent
9976050eca
commit
90d122ec63
3 files changed
+41
-12
No files matched your search
@@ -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 @@ case "$1" in
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
||||
exit $?
|
||||
|
||||
+5
-2
@@ -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 @@ def main():
|
||||
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
|
||||
|
||||
@@ -42,7 +42,7 @@ import console
|
||||
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 @@ class Daemon:
|
||||
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 @@ class Daemon:
|
||||
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):
|
||||
|
||||