다른 터미널에서 경로 지도 제작 이어 가기

LinuxBeginner
지금 연습하기

소개

지역 산책로 안내소에서 방문객용 경로 카드를 준비하고 있습니다. 제공된 프로그램은 작은 가상 네트워크에서 경로를 계산하고 실제 SVG 지도를 그립니다. 첫 묶음을 만든 다음 다음 묶음과 경로 모드를 입력할 때까지 기다립니다. 다음 방문객 그룹에는 계단 없는 경로가 필요하므로 첫 명령을 백그라운드에 두기만 해서는 부족합니다. 프로그램의 입력 프롬프트로 돌아가야 합니다.

Terminal A에서 이름 있는 tmux 세션을 시작하고 클라이언트를 분리한 뒤 Terminal B에서 같은 프로세스를 이어서 실행하고 Maps에서 결과를 사용합니다. 기본 터미널 사용법만 알면 되며 Python 작성이나 지도 제작 경험은 필요하지 않습니다. 모든 경로는 가상의 학습 데이터이며 실제 산책로 길 안내가 아닙니다.

이름 있는 지도 제작 작업 시작하기

이 단계에서는 실제 대화형 지도 제작 작업을 시작하고 다음 묶음을 기다리는 상태로 둡니다.

셸은 명령을 읽고, 작업은 셸이 실행한 프로그램입니다. tmux는 백그라운드 서버에서 터미널과 작업을 유지합니다. 이름 있는 세션은 각각 터미널을 가진 창들을 묶습니다. 클라이언트는 브라우저 터미널을 해당 세션에 연결합니다. 분리는 클라이언트만 떼어 내며 서버와 작업은 계속됩니다. VM이나 서버가 삭제되면 tmux가 작업을 복원해 주지는 않습니다.

두 브라우저 터미널은 /home/labex/project/trail-maps에서 시작하며 이미 각각 별도의 플랫폼 tmux 세션 안에 있습니다. plan.tsv는 상대 경로로, 현재 디렉터리의 파일을 가리킵니다. 여기서 연결된 tmux를 한 겹 더 만들지 마세요. 먼저 Terminal A에서 계획을 읽습니다. cat은 파일을 출력하며 열에는 작업, 다음 묶음, 경로 모드, 이유가 표시됩니다.

cat plan.tsv

survey 작업에는 step-free 모드의 east 묶음이 필요합니다. walking은 계단을 사용할 수 있고 step-free는 계단이 있는 모든 간선을 제외한 뒤 최단 경로를 계산합니다. 첫 묶음은 walking을 사용하므로 그 더 짧은 경로가 이후 경로와 달라도 정상입니다. 지리 지식은 필요하지 않습니다.

세션을 나열합니다. list-sessions는 tmux 명령입니다. 준비된 trail-reference 세션을 보존하세요. TTYD-로 시작하는 이름은 플랫폼의 세션입니다.

tmux list-sessions

trail-survey를 만듭니다. new-session은 세션을 만들고 -d는 분리 상태로 두며 -s는 고유한 이름을 지정합니다. 따옴표로 묶은 마지막 인수는 그 터미널에서 실행할 명령입니다. python3는 제공된 프로그램을 실행하고 guided는 이 실습의 독립 작업을 선택합니다. 이 명령은 세션 안에서 지도 프로그램을 직접 시작합니다.

tmux new-session -d -s trail-survey 'python3 /opt/labex/atlas/map-job.py guided'

세션에 연결합니다. attach-session은 -t로 대상을 선택합니다. 플랫폼의 기존 tmux 클라이언트 안에서는 tmux를 중첩하는 대신 클라이언트가 연결된 세션을 바꿉니다.

tmux attach-session -t trail-survey

절대 프로그램 경로는 준비된 지도 도구를 가리킵니다. 프로그램이 PID를 알리고 morning SVG 두 개를 쓴 다음 Next batch:에서 기다립니다. PID를 기억하세요. Terminal B에서도 같은 값이 보여야 합니다. 프로그램은 살아서 입력을 기다리고 있으므로 셸 프롬프트가 없는 것이 정상입니다. 이 질문에 셸 명령을 입력하지 마세요.

생성할 때 duplicate session이 나오면 세션 목록을 보고 기존 trail-survey에 연결하세요. 파일을 지우거나 대체 작업을 시작하지 마세요. sessions should be nested with care가 보이면 tmux 안에서 연결된 new-session을 시도한 것입니다. 플랫폼 셸로 돌아가 위의 분리 생성 방식을 사용하세요. 프로그램이 계속 기다리는 동안 이 단계를 검증합니다.

Terminal B에서 이어서 진행하기

이 단계에서는 첫 클라이언트를 분리하고 두 번째 독립 터미널에서 다음 묶음을 완성합니다.

Terminal A에 포커스를 둡니다. Ctrl을 누른 채 B를 누르고 두 키를 모두 놓은 다음 D를 누르세요. 접두 키 조합 뒤에 다른 키를 누르는 것이며 세 키를 동시에 누르는 동작이 아닙니다. tmux에 분리 명령을 보냅니다. exit나 Ctrl+C는 쓰지 마세요. 화면 연결을 떼는 대신 셸을 종료하거나 지도 프로그램을 중단합니다.

브라우저에 [detached (from session trail-survey)]가 표시됩니다. 플랫폼이 tmux를 직접 실행하므로 이 터미널에는 돌아갈 바깥 셸이 없습니다. 그대로 두세요. 자체의 지속적인 셸이 있는 Terminal B를 엽니다. 브라우저 탭을 닫거나 네트워크가 끊기는 것은 다른 사건입니다. 이 실습은 같은 VM에서 의도적인 분리와 재연결을 검증합니다.

Terminal B에서 세션을 나열합니다.

tmux list-sessions

trail-survey는 목록에 그대로 있고 이제 연결된 클라이언트는 없어야 합니다. 정확히 이 이름으로 다시 연결합니다.

tmux attach-session -t trail-survey

앞서와 같은 PID와 Next batch: 질문이 보여야 합니다. 여전히 셸 프롬프트가 보이면 프로그램에 연결하지 못한 것입니다. 다른 작업이 보이면 분리하고 올바른 이름을 고르세요. 그 작업에 답을 보내지 마세요.

프로그램의 질문에 요청된 다음 묶음을 입력합니다. 지도 프로그램에 전달하는 입력이며 셸 명령이 아닙니다.

east

다음으로 Route mode:를 묻습니다. 계획에 있는 계단 없는 모드를 지정합니다.

step-free

파일을 생성하기 전에 Plan: east / step-free를 표시하고 Build this batch? [yes/no]:를 묻습니다. 묶음과 모드를 함께 확인하세요. 하나라도 틀리면 no를 입력해 같은 프로세스의 Next batch:로 돌아갈 수 있습니다. 원래 지도는 바뀌지 않습니다. 올바른 계획을 골랐다면 확정합니다.

yes

프로그램이 두 경로를 더 계산하고 SVG를 쓴 뒤 색인을 갱신합니다. Collection ready: 4 real SVG maps and index.json.가 나와야 합니다. 마지막 Inspection mode 프롬프트는 원래 프로세스를 점검할 수 있도록 의도적으로 살려 둡니다. 그대로 유지하세요. 유효하지 않은 묶음 이름이나 모드는 첫 묶음을 잃지 않고 거부되므로 프롬프트를 읽고 같은 질문에 다시 답하면 됩니다. 유효하지만 잘못 고른 값은 확인 단계에서 no로 돌아가 다시 선택할 수 있습니다. 브라우저 새로고침은 대기 중인 계획을 바꾸지 않습니다. yes로 확정한 뒤에는 최종 컬렉션이므로 확정 전에 계획과 비교하세요. 파일을 지우거나 프로세스를 다시 시작해 새로운 작업을 이어서 실행한 것처럼 꾸미지 마세요.

검증기는 살아 있는 프로세스, 정확한 경로, 완전한 색인을 비교합니다. 비슷한 결과를 내는 새 프로세스를 만드는 것은 이 작업을 이어서 실행하는 것이 아닙니다.

완성한 지도 컬렉션 사용하기

이 단계에서는 작업을 사용 가능한 상태로 유지하면서 실제 지도와 기계가 읽을 수 있는 색인을 살펴봅니다.

Maps를 열고 survey/를 선택합니다. 첫 두 카드는 원래의 morning 지도입니다. 다음 두 카드는 step-free 모드의 east 지도입니다. east의 Cabin행 경로에서 Download SVG를 선택해 SVG를 저장하세요. 녹색 경로는 Orchard를 거쳐 Bridge의 계단 간선을 피해 가야 합니다. 첫 morning의 Cabin행 경로는 Bridge를 사용할 수 있습니다. 이 차이는 라벨만 바꾼 결과가 아니라 선택 모드를 반영한 그래프 계산에서 나옵니다.

컬렉션으로 돌아와 east의 Lookout행 경로를 읽습니다. 경로와 소요 시간은 index.json에도 기록됩니다. 데이터를 살펴보려면 Terminal B에 머무른 채 Ctrl+B 다음 C를 누르세요. 셸이 있는 tmux 창이 새로 생기며 지도 프로그램은 창 0에서 계속 실행됩니다. 창은 같은 이름 있는 세션 안의 또 다른 터미널이며 프로그램을 다시 시작하지 않습니다. 셸 프롬프트가 보이면 다시 명령을 입력할 수 있습니다.

cd로 셸의 현재 디렉터리를 명시합니다. 절대 경로가 /로 시작하므로 새 셸이 어디에서 시작했든 사용할 수 있습니다.

cd /home/labex/project/trail-maps

ls는 디렉터리 안의 이름을 나열합니다. 지도 네 개, HTML 뷰어, 색인, 프로세스 정보가 있는지 확인합니다.

ls survey

상대 경로를 이용해 색인을 출력합니다.

cat survey/index.json

각 레코드에는 묶음, 모드, 목적지, 분 단위 시간, 계산된 노드 순서가 들어 있습니다. 원래 지도도 새 지도와 함께 남아 있습니다. 단순한 완료 메시지가 아니라 사용할 수 있는 컬렉션입니다.

다시 세션을 나열합니다.

tmux list-sessions

trail-survey와 trail-reference가 모두 남아 있어야 합니다. 세션은 분리된 상태에서도 계속 실행될 수 있습니다. 플랫폼의 TTYD- 세션은 업무 작업과 관계없습니다. 정리하려고 kill-server를 실행하지 마세요. 참고 작업까지 모든 세션을 종료합니다. 검증을 통과할 때까지 환경을 유지하세요. 원래 지도 프로그램으로 돌아가려면 Ctrl+B를 누른 다음 숫자 0을 누릅니다. 창 0이 선택되며 점검 프롬프트와 같은 PID가 그대로 보여야 합니다.

두 브라우저 터미널 사이에서 같은 프로세스를 이어서 사용하는 기능을 확인했습니다. VM 재부팅 복구, 물리 장치 변경, 자동 재시도, 플랫폼의 네트워크 재연결까지 검증한 것은 아닙니다.

요약

이름 있는 tmux 세션을 만들고 클라이언트를 분리한 뒤 다른 터미널에서 같은 살아 있는 지도 프로그램에 다시 연결해 답변을 이어 갔습니다. 컬렉션에는 원래의 보행용 지도, 요청된 계단 없는 지도, 정확한 색인이 함께 있습니다. 참고 세션도 보존했습니다. 세션을 이어 쓰려면 tmux 서버와 VM이 계속 살아 있어야 합니다.