VPN과 함께 SSH 세션이 죽는다: tmux인가 작업 실행기인가
다시 연결된 터널은 오래된 SSH 소켓을 되살리지 않습니다. 작업에 다시 붙을 터미널 세션이 필요한지, 결과가 기록되는 작업이 필요한지 결정하세요.
VPN 표시가 초록색이 되고 경로도 돌아왔지만, 열어 둔 SSH 창은 다시 프롬프트를 돌려주지 않습니다. 경로를 복구해도 그 경로를 쓰던 TCP 대화는 복구되지 않으므로 그 창에 입력한 내용은 사라졌습니다. 진짜 걱정이 편집기 버퍼나 긴 마이그레이션이라면, 그 작업을 하나의 연결에 묶지 않는 것이 해법입니다. tmux와 작업 실행기는 그 문제의 서로 다른 절반을 해결합니다.
다시 연결된 VPN은 소켓을 이어받지 않는다
TCP에는 주소가 바뀐 뒤 이어가는 개념이 없습니다. SSH 연결은 양 끝으로 식별되며, 터널이 다시 만들어지면 로컬 주소가 바뀔 수 있고 오래된 소켓은 죽습니다. 서버는 결국 알아차리지만, 터미널은 즉시 알아차립니다.
클라이언트 측 keepalive은 죽은 상대를 더 빨리 감지합니다. 세션을 되돌려 놓지도 못하고, 이미 실행 중이던 명령을 복구할 수도 없습니다. keepalive는 감지기이지 복구 도구가 아닙니다. 원격 명령이 살아남았는지에 대해서는 아무것도 말하지 않습니다.
작업을 원격 호스트에 두세요
세션은 노트북이 아니라 원격 호스트에서 만드세요. 평소처럼 접속해 그곳에서 tmux를 시작하고, 그 안에서 편집기나 마이그레이션을 실행하세요. 기본 접두사로 분리하면 SSH 연결이 사라져도 세션은 계속 돌아갑니다. tmux를 로컬에서 시작하는 것은 닫힌 창에서 셸을 보호할 뿐, 죽은 터널에서 원격 명령을 보호하지는 않습니다.
ssh [email protected]
tmux new-session -s office-workVPN이 돌아오면 같은 호스트로 새 SSH 연결을 열고 이름으로 다시 붙으세요. 지속되는 객체는 세션이지 연결이 아닙니다. 일주일 뒤에도 알아볼 이름을 붙여 두세요.
tmux와 작업 실행기
tmux는 호스트가 켜져 있는 동안 대화형 프로세스를 살려 둡니다. 작업 실행기나 서비스 관리자는 비대화형 작업을 살려 두고, 종료 상태를 기록하며, SSH 세션이 완전히 끝나도 견딥니다. 전자는 여러분이 지켜보는 작업을 위한 것이고, 후자는 예약해 두고 나중에 확인하는 작업을 위한 것입니다.
호스트가 복원하도록 설정되어 있지 않으면 둘 다 재부팅을 견디지 못합니다. tmux 세션은 기계와 함께 죽고, 일시적인 작업은 유닛으로 등록되지 않았다면 부팅과 함께 죽습니다. 작업이 무엇보다 오래 살아남아야 하는지에 따라 고르세요.
두 방식 모두 다시 연결한 뒤 읽을 수 있는 로그가 필요합니다. 로그가 없으면 프로세스가 있다는 것은 알아도 무엇을 했는지는 모릅니다. 로그 경로를 세션 이름 옆에 적어 두세요.
무엇이 살아남아야 하는지로 결정하세요
작업이 중간에 멈출 때 일어날 수 있는 최악의 상황으로 결정하세요. 편집기 세션은 저장하지 않은 버퍼를 잃는데, 성가시지만 복구할 수 있습니다. 변경의 절반을 커밋하는 마이그레이션은 그렇지 않으며, 그래서 결과가 기록되는 실행기가 유리합니다. 작업이 대화형이고 길다면 tmux와 기록된 로그로 보통 충분합니다.
systemd-run --user --unit=migrate-customers --collect ./migrate.sh무엇을 고르든, 무언가를 다시 실행하기 전에 기록된 결과를 확인하세요. 마지막 줄이 없다면 서버가 무엇을 커밋했는지가 아니라 노트북이 무엇을 보았는지를 알려줍니다. 그 구분이 작업을 처음부터 연결 밖에 두는 이유이며, 분리와 다시 붙기의 모델은 그 가장 작은 형태입니다.