tmux Sessions and Windows
한국어 원문으로 표시합니다.
목표
tmux 세션과 윈도우를 만들고, detach 상태를 확인하고, 설정 파일이 실제로 서버에 반영되는지 검증한 뒤, 개발 환경을 재현하는 스크립트를 만듭니다.
왜 중요한가
tmux 에서 명령을 실제로 실행하는 것은 내 터미널이 아니라 tmux 서버 프로세스입니다. 내 터미널은 그 화면을 받아 보는 클라이언트일 뿐입니다. SSH 가 끊기면 클라이언트가 사라지지만 서버와 그 자식들은 아무 영향을 받지 않습니다 - 그래서 다시 접속해 attach 하면 화면까지 그대로 돌아옵니다. nohup 과 결정적으로 다른 점이 이것입니다. nohup 은 작업을 살리지만 화면과 입력은 돌려주지 않습니다. 그리고 마지막 단계가 스크립트인 이유는, 손으로 만든 배치는 서버가 재부팅되면 사라지지만 스크립트는 남기 때문입니다.
단계
work라는 이름의 세션을 만드세요.work세션에 윈도우를 추가해 총 3개 이상으로 만들고, 그중 하나의 이름을logs로 하세요.work세션의 0번 윈도우 이름을edit으로 바꾸세요.work세션에서 detach 하세요. 세션은 살아 있어야 하고 붙어 있는 클라이언트는 없어야 합니다.deploy세션을 붙지 않고 만들고, 그 안에build라는 이름의 윈도우가 있게 하세요./root/.tmux.conf를 만들어 다음 네 가지를 설정하세요: prefix 를C-a로, 마우스 사용 on, 윈도우 인덱스 시작을 1 로, 페인 인덱스 시작을 1 로.- 아무 파일이나 만들어
work세션의logs윈도우에서tail -f로 따라붙게 하세요. 채점 시점에 계속 실행 중이어야 합니다. /root/tmux/session.sh <세션이름>을 만드세요. 인자로 받은 이름의 세션을 붙지 않고 만들고, 그 안에api와db두 윈도우가 있어야 합니다. 같은 이름으로 두 번 실행해도 성공해야 하고 윈도우가 늘어나면 안 됩니다.
참고
tmux new-session -d -s 이름 -n 첫윈도우이름으로 붙지 않고 만들 수 있습니다.tmux has-session -t 이름 2>/dev/null은 세션이 있으면 0 을 반환합니다. 멱등성의 열쇠입니다.- 대상 표기는
세션:윈도우.페인입니다.work:logs처럼 씁니다. - 채점기는 6번을 검사할 때 별도 소켓에 임시 서버를 띄워 그 설정 파일을 실제로 읽혀 봅니다. 파일에 적혀 있어도 문법 오류가 있으면 실패합니다.
- 흔한 실수 1: 8번에서 세션 이름을 하드코딩하면 인자를 받는 의미가 없어집니다.
- 흔한 실수 2: 8번에서
-d를 빼면 스크립트가 attach 하려 들어 자동화에서 멈춥니다.
첫 세션 만들기
work 라는 이름의 세션을 만드세요.
tmux new -s 이름 으로 만듭니다. 세션을 만들면 서버도 함께 뜹니다.
윈도우 추가하고 이름 붙이기
work 세션에 윈도우를 추가해 총 3개 이상으로 만들고, 그중 하나의 이름을 logs 로 하세요.
prefix + c 로 새 윈도우, prefix + , 로 이름 변경입니다. CLI 로는 new-window -n 이름 을 씁니다.
0번 윈도우 이름 바꾸기
work 세션의 0번 윈도우 이름을 edit 으로 바꾸세요.
rename-window 명령에 -t 로 대상을 지정할 수 있습니다. 대상 표기는 세션:윈도우 형식입니다.
세션 떼어 놓기
work 세션에서 detach 하세요. 세션은 살아 있어야 하고 붙어 있는 클라이언트는 없어야 합니다.
prefix + d 로 뗍니다. 세션은 사라지지 않고 서버 안에 남아 있어야 합니다.
붙지 않고 세션 만들기
deploy 세션을 붙지 않고 만들고, 그 안에 build 라는 이름의 윈도우가 있게 하세요.
-d 옵션을 주면 만들기만 하고 붙지 않습니다. 첫 윈도우 이름은 -n 으로 지정합니다.
설정 파일 만들기
/root/.tmux.conf 를 만들어 다음 네 가지를 설정하세요: prefix 를 C-a 로, 마우스 사용 on, 윈도우 인덱스 시작을 1 로, 페인 인덱스 시작을 1 로.
prefix 변경에는 unbind 와 set -g 가 함께 필요합니다. pane-base-index 는 윈도우 옵션이라 setw 로 지정합니다.
장시간 프로세스를 세션에 두기
아무 파일이나 만들어 work 세션의 logs 윈도우에서 tail -f 로 따라붙게 하세요. 채점 시점에 계속 실행 중이어야 합니다.
파일을 하나 만들어 tail -f 로 따라붙이세요. logs 윈도우에서 계속 돌고 있어야 합니다.
세션 부트스트랩 스크립트
/root/tmux/session.sh <세션이름> 을 만드세요. 인자로 받은 이름의 세션을 붙지 않고 만들고, 그 안에 api 와 db 두 윈도우가 있어야 합니다. 같은 이름으로 두 번 실행해도 성공해야 하고 윈도우가 늘어나면 안 됩니다.
세션 이름을 $1 로 받고, 이미 있으면 그대로 두고 성공해야 합니다. has-session 으로 확인할 수 있습니다.