From 465add46d44fbd4f659e7c6189db840be035b238 Mon Sep 17 00:00:00 2001 From: spolyack Date: Sun, 18 Sep 2016 11:36:09 -0400 Subject: [PATCH] Attempt to verify the PID in an existing PID file before giving up. If the PID doesn't map to a running process, then we can simply ignore the presence of the PID file and overwrite it with the current (new) PID later. --- PlexPy.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/PlexPy.py b/PlexPy.py index 82a91808..903ce790 100755 --- a/PlexPy.py +++ b/PlexPy.py @@ -122,8 +122,21 @@ def main(): # If the pidfile already exists, plexpy may still be running, so # exit if os.path.exists(plexpy.PIDFILE): - raise SystemExit("PID file '%s' already exists. Exiting." % - plexpy.PIDFILE) + try: + with open(plexpy.PIDFILE, 'r') as fp: + pid = int(fp.read()) + os.kill(pid, 0) + except IOError as e: + raise SystemExit("Unable to read PID file: %s", e) + except OSError: + logger.warn("PID file '%s' already exists, but PID %d is " \ + "not running. Ignoring PID file." % + (plexpy.PIDFILE, pid)) + else: + # The pidfile exists and points to a live PID. plexpy may + # still be running, so exit. + raise SystemExit("PID file '%s' already exists. Exiting." % + plexpy.PIDFILE) # The pidfile is only useful in daemon mode, make sure we can write the # file properly