Only register exit function if a PID file was created
The function only deletes the PID file.
This commit is contained in:
		| @@ -116,45 +116,41 @@ def run(): | |||||||
|  |  | ||||||
| def daemonize(configuration, logger): | def daemonize(configuration, logger): | ||||||
|     """Fork and decouple if Radicale is configured as daemon.""" |     """Fork and decouple if Radicale is configured as daemon.""" | ||||||
|     if configuration.getboolean("server", "daemon"): |     # Check and create PID file in a race-free manner | ||||||
|         # Check and create PID file in a race-free manner |     if configuration.get("server", "pid"): | ||||||
|  |         try: | ||||||
|  |             pid_path = os.path.abspath(os.path.expanduser( | ||||||
|  |                 configuration.get("server", "pid"))) | ||||||
|  |             pid_fd = os.open( | ||||||
|  |                 pid_path, os.O_CREAT | os.O_EXCL | os.O_WRONLY) | ||||||
|  |         except OSError as e: | ||||||
|  |             raise OSError("PID file exists: %s" % | ||||||
|  |                           configuration.get("server", "pid")) from e | ||||||
|  |     pid = os.fork() | ||||||
|  |     if pid: | ||||||
|  |         # Write PID | ||||||
|         if configuration.get("server", "pid"): |         if configuration.get("server", "pid"): | ||||||
|             try: |             with os.fdopen(pid_fd, "w") as pid_file: | ||||||
|                 pid_path = os.path.abspath(os.path.expanduser( |                 pid_file.write(str(pid)) | ||||||
|                     configuration.get("server", "pid"))) |         sys.exit() | ||||||
|                 pid_fd = os.open( |     if configuration.get("server", "pid"): | ||||||
|                     pid_path, os.O_CREAT | os.O_EXCL | os.O_WRONLY) |         os.close(pid_fd) | ||||||
|             except OSError as e: |  | ||||||
|                 raise OSError("PID file exists: %s" % |  | ||||||
|                               configuration.get("server", "pid")) from e |  | ||||||
|         pid = os.fork() |  | ||||||
|         if pid: |  | ||||||
|             # Write PID |  | ||||||
|             if configuration.get("server", "pid"): |  | ||||||
|                 with os.fdopen(pid_fd, "w") as pid_file: |  | ||||||
|                     pid_file.write(str(pid)) |  | ||||||
|             sys.exit() |  | ||||||
|         if configuration.get("server", "pid"): |  | ||||||
|             os.close(pid_fd) |  | ||||||
|         # Decouple environment |  | ||||||
|         os.chdir("/") |  | ||||||
|         os.setsid() |  | ||||||
|         with open(os.devnull, "r") as null_in: |  | ||||||
|             os.dup2(null_in.fileno(), sys.stdin.fileno()) |  | ||||||
|         with open(os.devnull, "w") as null_out: |  | ||||||
|             os.dup2(null_out.fileno(), sys.stdout.fileno()) |  | ||||||
|             os.dup2(null_out.fileno(), sys.stderr.fileno()) |  | ||||||
|  |  | ||||||
|     # Register exit function |         # Register exit function | ||||||
|     def cleanup(): |         def cleanup(): | ||||||
|         """Remove the PID files.""" |             """Remove the PID files.""" | ||||||
|         logger.debug("Cleaning up") |             logger.debug("Cleaning up") | ||||||
|         # Remove PID file |             # Remove PID file | ||||||
|         if (configuration.get("server", "pid") and |  | ||||||
|                 configuration.getboolean("server", "daemon")): |  | ||||||
|             os.unlink(pid_path) |             os.unlink(pid_path) | ||||||
|  |         atexit.register(cleanup) | ||||||
|     atexit.register(cleanup) |     # Decouple environment | ||||||
|  |     os.chdir("/") | ||||||
|  |     os.setsid() | ||||||
|  |     with open(os.devnull, "r") as null_in: | ||||||
|  |         os.dup2(null_in.fileno(), sys.stdin.fileno()) | ||||||
|  |     with open(os.devnull, "w") as null_out: | ||||||
|  |         os.dup2(null_out.fileno(), sys.stdout.fileno()) | ||||||
|  |         os.dup2(null_out.fileno(), sys.stderr.fileno()) | ||||||
|  |  | ||||||
|  |  | ||||||
| def serve(configuration, logger): | def serve(configuration, logger): | ||||||
| @@ -234,7 +230,8 @@ def serve(configuration, logger): | |||||||
|     else: |     else: | ||||||
|         # Fallback to busy waiting |         # Fallback to busy waiting | ||||||
|         select_timeout = 1.0 |         select_timeout = 1.0 | ||||||
|     daemonize(configuration, logger) |     if configuration.getboolean("server", "daemon"): | ||||||
|  |         daemonize(configuration, logger) | ||||||
|     logger.debug("Radicale server ready") |     logger.debug("Radicale server ready") | ||||||
|     while not shutdown_program: |     while not shutdown_program: | ||||||
|         try: |         try: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Unrud
					Unrud