--- a/etwist/server.py Tue May 18 18:18:08 2010 +0200
+++ b/etwist/server.py Thu May 20 20:47:13 2010 +0200
@@ -41,6 +41,7 @@
from cubicweb.web import dumps
from logilab.common.decorators import monkeypatch
+from logilab.common.daemon import daemonize
from cubicweb import AuthenticationError, ConfigurationError, CW_EVENT_MANAGER
from cubicweb.web import Redirect, DirectResponse, StatusResponse, LogOut
@@ -49,30 +50,6 @@
from cubicweb.etwist.request import CubicWebTwistedRequestAdapter
from cubicweb.etwist.http import HTTPResponse
-def daemonize():
- # XXX unix specific
- # XXX factorize w/ code in cw.server.server and cw.server.serverctl
- # (start-repository command)
- # See http://www.erlenstar.demon.co.uk/unix/faq_toc.html#TOC16
- if os.fork(): # launch child and...
- return 1
- os.setsid()
- if os.fork(): # launch child again.
- return 1
- # move to the root to avoit mount pb
- os.chdir('/')
- # set paranoid umask
- os.umask(077)
- null = os.open('/dev/null', os.O_RDWR)
- for i in range(3):
- try:
- os.dup2(null, i)
- except OSError, e:
- if e.errno != errno.EBADF:
- raise
- os.close(null)
- return None
-
def start_task(interval, func):
lc = task.LoopingCall(func)
# wait until interval has expired to actually start the task, else we have
@@ -423,15 +400,8 @@
raise ConfigurationError("Under windows, you must use the service management "
"commands (e.g : 'net start my_instance)'")
print 'instance starting in the background'
- if daemonize():
+ if daemonize(config['pid-file']):
return # child process
- if config['pid-file']:
- # ensure the directory where the pid-file should be set exists (for
- # instance /var/run/cubicweb may be deleted on computer restart)
- piddir = os.path.dirname(config['pid-file'])
- if not os.path.exists(piddir):
- os.makedirs(piddir)
- file(config['pid-file'], 'w').write(str(os.getpid()))
root_resource.init_publisher() # before changing uid
if config['uid'] is not None:
try: