Daemonize zuul.

Change-Id: If3d30ec8f03ca35d8c8dd2c1347441aab535f8a1
diff --git a/zuul-server b/zuul-server
index 8d99e10..e78fa7b 100755
--- a/zuul-server
+++ b/zuul-server
@@ -15,6 +15,8 @@
 
 import argparse
 import ConfigParser
+import daemon
+import daemon.pidlockfile
 import logging.config
 import os
 import signal
@@ -33,6 +35,8 @@
         parser = argparse.ArgumentParser(description='Project gating system.')
         parser.add_argument('-c', dest='config',
                             help='specify the config file')
+        parser.add_argument('-d', dest='nodaemon', action='store_true',
+                            help='do not run as a daemon')
         self.args = parser.parse_args()
 
     def read_config(self):
@@ -80,13 +84,21 @@
         while True:
             signal.pause()
 
-    def start(self):
-        self.parse_arguments()
-        self.read_config()
-        self.setup_logging()
-        self.main()
-
 
 if __name__ == '__main__':
     server = Server()
-    server.start()
+    server.parse_arguments()
+    server.read_config()
+    server.setup_logging()
+
+    if server.config.has_option('zuul', 'pidfile'):
+        pid_fn = os.path.expanduser(server.config.get('zuul', 'pidfile'))
+    else:
+        pid_fn = '/var/run/zuul/zuul.pid'
+    pid = daemon.pidlockfile.TimeoutPIDLockFile(pid_fn, 10)
+
+    if server.args.nodaemon:
+        server.main()
+    else:
+        with daemon.DaemonContext(pidfile=pid):
+            server.main()