Allow marconi-server to properly daemonize

This patch allows marconi-server to properly detach from the controlling terminal and daemonize.

Change-Id: Ib6eabf8c44c5526ea71f913908bf2d4d37c06511
Closes-Bug: #1287490
This commit is contained in:
Mike Panetta 2014-03-12 12:25:11 -04:00
parent a4ed60feed
commit 122aeac53a

View File

@ -12,7 +12,7 @@
# implied. # implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import os
from oslo.config import cfg from oslo.config import cfg
from marconi.common import cli from marconi.common import cli
@ -28,4 +28,32 @@ def run():
conf(project='marconi', prog='marconi-queues') conf(project='marconi', prog='marconi-queues')
server = bootstrap.Bootstrap(conf) server = bootstrap.Bootstrap(conf)
# The following code is to daemonize marconi-server to avoid
# an issue with wsgiref writing to stdout/stderr when we don't
# want it to. This is specifically needed to allow marconi to
# run under devstack, but it may also be useful for other scenarios.
# Open /dev/zero and /dev/null for redirection.
zerofd = os.open('/dev/zero', os.O_RDONLY)
nullfd = os.open('/dev/null', os.O_WRONLY)
# Close the stdthings and reassociate them with a non terminal
os.dup2(zerofd, 0)
os.dup2(nullfd, 1)
os.dup2(nullfd, 2)
# Detach process context, this requires 2 forks.
try:
pid = os.fork()
if pid > 0:
os._exit(0)
except OSError:
os._exit(1)
try:
pid = os.fork()
if pid > 0:
os._exit(0)
except OSError:
os._exit(2)
server.run() server.run()