timeout N ssh ... 'long-cmd' — SSH-session kill ≠ remote process kill#
Ha a remote apt-get 300 sec után még fut: a timeout parancs kill-eli a lokális SSH TCP-t, de a remote apt-get tovább fut. Ennek két oka van:
dpkg-lock + atomic completion — apt-get a megszakítást nem fogadja el mid-unpack, completing-igrácelbash -s <<EOFheredoc-szerű invokálás esetén a remote-onbashSIGHUP-ot kap, de a childapt-getnohup-szerűen folytatja amíg a kernel-szignál-handler megszámolja a sigprocmask-ot
Tünet#
- Lokálisan:
Exit code 124(timeout 124 = signal 12 + 124-128 kódolás) - Remote-on:
pgrep -af aptmég mutatja a folyamatot,tail /var/log/apt/history.logStart-Date van End-Date NÉLKÜL
Helyes monitoring egy másik SSH-val#
Ne emelt timeout-tal próbálkozz, hanem külön SSH-val polling:
# polling másik shell-ben
while ssh host 'pgrep -af "apt|dpkg" | grep -v pgrep | head -1' | grep -q .; do
sleep 10
done
ssh host 'tail -3 /var/log/apt/history.log' # End-Date kiírja
Vagy Claude Code Monitor toollal:
Monitor(command="""
until ssh host '! pgrep -f apt-get'; do sleep 10; done
echo APT-DONE
""", timeout_ms=600000)
Helyes async pattern#
nohup-szerű:
ssh host 'nohup bash -c "apt-get -y upgrade && touch /tmp/apt-done" >/var/log/apt-async.log 2>&1 &'
# később:
ssh host 'test -f /tmp/apt-done && echo DONE'
Hol jelent meg#
2026-05-15 prod apt upgrade — timeout 300 ssh ... exit 124-et adott, de a prod-on a 62 csomag-update mégis befejeződött (/var/log/apt/history.log End-Date 09:47:12). Részletes log: 08-Sessions/2026-05-15-szerver-update