diff options
| author | Andrew Branson <andrew.branson@jolla.com> | 2026-06-02 00:18:28 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@jolla.com> | 2026-06-02 00:18:28 +0200 |
| commit | 21dcc7e6413cf1e93a37cce2098a86c2a3ab5e5a (patch) | |
| tree | 6ee366f4e6f1c79135d0d6b34c73731c750571d2 | |
| parent | 5d24d33536d1041b4d9f107a5f5813bd43177530 (diff) | |
Log MCP wrapper lifecycle
Capture wrapper and Python PIDs, stderr, exit status, and common termination signals in the persistent Sailfish MCP server log.
| -rwxr-xr-x | bin/sailfish-devel-mcp | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/bin/sailfish-devel-mcp b/bin/sailfish-devel-mcp index 5105b01..94a946e 100755 --- a/bin/sailfish-devel-mcp +++ b/bin/sailfish-devel-mcp @@ -4,5 +4,81 @@ set -eu root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) PYTHONPATH="$root/src${PYTHONPATH:+:$PYTHONPATH}" export PYTHONPATH -exec python3 -m sailfish_devel_mcp "$@" +PYTHONUNBUFFERED="${PYTHONUNBUFFERED:-1}" +export PYTHONUNBUFFERED + +if [ -n "${SAILFISH_DEVEL_MCP_LOG_DIR:-}" ]; then + log_dir=$SAILFISH_DEVEL_MCP_LOG_DIR +elif [ -n "${XDG_STATE_HOME:-}" ]; then + log_dir=$XDG_STATE_HOME/sailfish-devel-mcp +elif [ -n "${HOME:-}" ]; then + log_dir=$HOME/.local/state/sailfish-devel-mcp +else + log_dir=/tmp/sailfish-devel-mcp +fi + +log_file=$log_dir/server.log +if mkdir -p "$log_dir" 2>/dev/null && touch "$log_file" 2>/dev/null; then + { + log_line() { + printf '[%s] %s\n' "$(date -Is)" "$*" >&2 + } + + log_exit_once() { + status=$1 + if [ "$exit_logged" -eq 0 ]; then + log_line "sailfish-devel-mcp exited status=$status" + exit_logged=1 + fi + } + + on_signal() { + signal=$1 + log_line "sailfish-devel-mcp wrapper received signal=$signal" + if [ -n "$child_pid" ]; then + kill "-$signal" "$child_pid" 2>/dev/null || true + wait "$child_pid" + status=$? + else + status=128 + fi + log_exit_once "$status" + exit "$status" + } + child_pid= + exit_logged=0 + + trap 'on_signal HUP' HUP + trap 'on_signal INT' INT + trap 'on_signal QUIT' QUIT + trap 'on_signal TERM' TERM + trap 'status=$?; log_exit_once "$status"' EXIT + + printf '\n' >&2 + printf '[%s] starting sailfish-devel-mcp wrapper_pid=%s parent_pid=%s' \ + "$(date -Is)" "$$" "${PPID:-unknown}" >&2 + if [ "$#" -gt 0 ]; then + printf ' argv=' >&2 + for arg do + printf ' %s' "$arg" >&2 + done + fi + printf '\n' >&2 + + exec 3<&0 + set +e + python3 -m sailfish_devel_mcp "$@" <&3 & + child_pid=$! + log_line "sailfish-devel-mcp python_pid=$child_pid" + wait "$child_pid" + status=$? + exec 3<&- + child_pid= + set -e + log_exit_once "$status" + exit "$status" + } 2>>"$log_file" +fi + +exec python3 -m sailfish_devel_mcp "$@" |
