diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2014-11-11 23:13:03 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2014-11-12 15:56:30 +0100 |
commit | 53ec8afee9c963de5883b9b7ca9bd6537deef123 (patch) | |
tree | ae953982f85e211710ba75c90ed44eb0a1dd083d /src/lib/Bcfg2/Server/BuiltinCore.py | |
parent | 174e54f8455f9f5372da6469c5b093353bcd50ee (diff) | |
parent | f6b3d6dc89e4ba5c2ec643931394db45b8c7f176 (diff) | |
download | bcfg2-53ec8afee9c963de5883b9b7ca9bd6537deef123.tar.gz bcfg2-53ec8afee9c963de5883b9b7ca9bd6537deef123.tar.bz2 bcfg2-53ec8afee9c963de5883b9b7ca9bd6537deef123.zip |
Merge branch 'maint'
Conflicts:
debian/changelog
doc/conf.py
doc/releases/index.txt
doc/server/database.txt
doc/server/plugins/generators/cfg.txt
doc/server/plugins/generators/sslca.txt
man/bcfg2.conf.5
misc/bcfg2-selinux.spec
misc/bcfg2.spec
osx/Makefile
osx/macports/Portfile
schemas/packages.xsd
solaris-ips/MANIFEST.bcfg2-server.header
solaris-ips/MANIFEST.bcfg2.header
solaris-ips/Makefile
solaris-ips/pkginfo.bcfg2
solaris-ips/pkginfo.bcfg2-server
solaris/Makefile
solaris/pkginfo.bcfg2
solaris/pkginfo.bcfg2-server
src/lib/Bcfg2/Client/Client.py
src/lib/Bcfg2/Client/Proxy.py
src/lib/Bcfg2/Client/Tools/APT.py
src/lib/Bcfg2/Client/Tools/Action.py
src/lib/Bcfg2/Client/Tools/SYSV.py
src/lib/Bcfg2/Client/Tools/YUM.py
src/lib/Bcfg2/Client/Tools/__init__.py
src/lib/Bcfg2/Options.py
src/lib/Bcfg2/Reporting/Collector.py
src/lib/Bcfg2/Reporting/templates/base.html
src/lib/Bcfg2/Server/Admin/__init__.py
src/lib/Bcfg2/Server/BuiltinCore.py
src/lib/Bcfg2/Server/Core.py
src/lib/Bcfg2/Server/Plugins/Packages/Apt.py
src/lib/Bcfg2/Server/Plugins/Probes.py
src/lib/Bcfg2/settings.py
src/lib/Bcfg2/version.py
testsuite/Testsrc/Testlib/TestClient/TestTools/Test_init.py
testsuite/Testsrc/test_code_checks.py
Diffstat (limited to 'src/lib/Bcfg2/Server/BuiltinCore.py')
-rw-r--r-- | src/lib/Bcfg2/Server/BuiltinCore.py | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/Bcfg2/Server/BuiltinCore.py b/src/lib/Bcfg2/Server/BuiltinCore.py index 769addf55..e138c57e4 100644 --- a/src/lib/Bcfg2/Server/BuiltinCore.py +++ b/src/lib/Bcfg2/Server/BuiltinCore.py @@ -1,5 +1,6 @@ """ The core of the builtin Bcfg2 server. """ +import os import sys import time import socket @@ -85,20 +86,30 @@ class BuiltinCore(NetworkCore): def _daemonize(self): """ Open :attr:`context` to drop privileges, write the PID file, and daemonize the server core. """ + # Attempt to ensure lockfile is able to be created and not stale try: - self.context.open() - self.logger.info("%s daemonized" % self.name) - return True + self.context.pidfile.acquire() except LockFailed: err = sys.exc_info()[1] self.logger.error("Failed to daemonize %s: %s" % (self.name, err)) return False except LockTimeout: - err = sys.exc_info()[1] - self.logger.error("Failed to daemonize %s: Failed to acquire lock " - "on %s" % (self.name, - Bcfg2.Options.setup.daemon)) - return False + try: # attempt to break the lock + os.kill(self.context.pidfile.read_pid(), 0) + except (OSError, TypeError): # No process with locked PID + self.context.pidfile.break_lock() + else: + err = sys.exc_info()[1] + self.logger.error("Failed to daemonize %s: Failed to acquire" + "lock on %s" % (self.name, + Bcfg2.Options.setup.daemon)) + return False + else: + self.context.pidfile.release() + + self.context.open() + self.logger.info("%s daemonized" % self.name) + return True def _run(self): """ Create :attr:`server` to start the server listening. """ |