--- ./patroni/postmaster.py 2018-09-26 13:58:59.000000000 +0200 +++ ./patroni/postmaster.py_ 2018-09-26 13:58:54.567944491 +0200 @@ -39,14 +39,15 @@ return {} def _is_postmaster_process(self): + postmaster_pid = int(self._postmaster_pid.get('pid', 0)) try: - start_time = int(self._postmaster_pid.get('start_time', 0)) - if start_time and abs(self.create_time() - start_time) > 3: - logger.info('Process %s is not postmaster, too much difference between PID file start time %s and ' - 'process start time %s', self.pid, self.create_time(), start_time) - return False - except ValueError: - logger.warning('Garbage start time value in pid file: %r', self._postmaster_pid.get('start_time')) + self.send_signal(0) + except psutil.NoSuchProcess: + logger.warning("Could not send stop signal to PostgreSQL") + return False + except psutil.AccessDenied as e: + logger.warning("Could not send stop signal to PostgreSQL (error: {0})".format(e)) + return False # Extra safety check. The process can't be ourselves, our parent or our direct child. if self.pid == os.getpid() or self.pid == os.getppid() or self.ppid() == os.getpid():