aprs.me/lib/aprsme/signal_handler.ex
Graham McIntire 60efa7677b
Fix ShutdownHandler terminating during normal startup
- Only initiate graceful shutdown for abnormal termination reasons
- Ignore :shutdown, {:shutdown, _}, and :normal termination reasons
- Add logging for SIGTERM handler installation

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-26 15:55:56 -05:00

43 lines
970 B
Elixir

defmodule Aprsme.SignalHandler do
@moduledoc """
Handles OS signals like SIGTERM for graceful shutdown.
"""
use GenServer
require Logger
def start_link(opts) do
GenServer.start_link(__MODULE__, opts, name: __MODULE__)
end
def init(_opts) do
# Install signal handler for SIGTERM
case :os.set_signal(:sigterm, :handle) do
:ok ->
Logger.info("SIGTERM signal handler installed")
error ->
Logger.warning("Failed to install SIGTERM handler: #{inspect(error)}")
end
{:ok, %{}}
end
# Handle SIGTERM signal
def handle_info({:signal, :sigterm}, state) do
Logger.info("Received SIGTERM signal, initiating graceful shutdown...")
# Trigger graceful shutdown
spawn(fn ->
Aprsme.ShutdownHandler.shutdown()
end)
{:noreply, state}
end
def handle_info(msg, state) do
Logger.debug("SignalHandler received unexpected message: #{inspect(msg)}")
{:noreply, state}
end
end