Blob Blame Raw
commit ac15c128524cd317623044d7fbaedb4eef3b557e
Author: Radek Novacek <>
Date:   Thu Oct 4 12:06:36 2012 +0200

    Create PID file as soon as possible
    PID file was created too late causing service stop to be unsuccessfull
    if call too soon after service start.
    Now PID file is create immediatelly when service is started and
    recreated after fork.

diff --git a/ b/
index 0c8babf..7b15f14 100644
--- a/
+++ b/
@@ -286,7 +286,7 @@ def daemonize(debugMode):
     return True
-def createPidFile(logger):
+def createPidFile(logger=None):
     signal.signal(signal.SIGINT, cleanup)
     signal.signal(signal.SIGTERM, cleanup)
@@ -297,7 +297,8 @@ def createPidFile(logger):
         f.write("%d" % os.getpid())
     except Exception, e:
-        logger.error("Unable to create pid file: %s" % str(e))
+        if logger is not None:
+            logger.error("Unable to create pid file: %s" % str(e))
 def cleanup(sig=None, stack=None):
@@ -312,6 +313,7 @@ def main():
     if os.access(PIDFILE, os.F_OK):
         print >>sys.stderr, "virt-who seems to be already running. If not, remove %s" % PIDFILE
+    createPidFile()
     parser = OptionParserEpilog(description="Agent for reporting virtual guest IDs to subscription-manager",
                                 epilog="virt-who also reads enviromental variables. They have the same name as command line arguments but uppercased, with underscore instead of dash and prefixed with VIRTWHO_ (e.g. VIRTWHO_ONE_SHOT). Empty variables are considered as disabled, non-empty as enabled")
@@ -425,6 +427,7 @@ def main():
         # Do a double-fork and other daemon initialization
         if not daemonize(options.debug):
             logger.error("Unable to fork, continuing in foreground")
+        createPidFile(logger)
     if not options.oneshot:
         if options.background and options.virtType == "libvirt":
@@ -444,8 +447,6 @@ def main():
     except Exception:
-    createPidFile(logger)
     logger.debug("Virt-who is running in %s mode" % options.virtType)
     if options.oneshot: