LabHub
배우기 러닝패스 코스

vim and tmux

tmux Sessions and Windows

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

tmux 세션과 윈도우를 만들고, detach 상태를 확인하고, 설정 파일이 실제로 서버에 반영되는지 검증한 뒤, 개발 환경을 재현하는 스크립트를 만듭니다.

왜 중요한가

tmux 에서 명령을 실제로 실행하는 것은 내 터미널이 아니라 tmux 서버 프로세스입니다. 내 터미널은 그 화면을 받아 보는 클라이언트일 뿐입니다. SSH 가 끊기면 클라이언트가 사라지지만 서버와 그 자식들은 아무 영향을 받지 않습니다 - 그래서 다시 접속해 attach 하면 화면까지 그대로 돌아옵니다. nohup 과 결정적으로 다른 점이 이것입니다. nohup 은 작업을 살리지만 화면과 입력은 돌려주지 않습니다. 그리고 마지막 단계가 스크립트인 이유는, 손으로 만든 배치는 서버가 재부팅되면 사라지지만 스크립트는 남기 때문입니다.

단계

  1. work 라는 이름의 세션을 만드세요.
  2. work 세션에 윈도우를 추가해 총 3개 이상으로 만들고, 그중 하나의 이름을 logs 로 하세요.
  3. work 세션의 0번 윈도우 이름을 edit 으로 바꾸세요.
  4. work 세션에서 detach 하세요. 세션은 살아 있어야 하고 붙어 있는 클라이언트는 없어야 합니다.
  5. deploy 세션을 붙지 않고 만들고, 그 안에 build 라는 이름의 윈도우가 있게 하세요.
  6. /root/.tmux.conf 를 만들어 다음 네 가지를 설정하세요: prefix 를 C-a 로, 마우스 사용 on, 윈도우 인덱스 시작을 1 로, 페인 인덱스 시작을 1 로.
  7. 아무 파일이나 만들어 work 세션의 logs 윈도우에서 tail -f 로 따라붙게 하세요. 채점 시점에 계속 실행 중이어야 합니다.
  8. /root/tmux/session.sh <세션이름> 을 만드세요. 인자로 받은 이름의 세션을 붙지 않고 만들고, 그 안에 apidb 두 윈도우가 있어야 합니다. 같은 이름으로 두 번 실행해도 성공해야 하고 윈도우가 늘어나면 안 됩니다.

참고

첫 세션 만들기

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 <세션이름> 을 만드세요. 인자로 받은 이름의 세션을 붙지 않고 만들고, 그 안에 apidb 두 윈도우가 있어야 합니다. 같은 이름으로 두 번 실행해도 성공해야 하고 윈도우가 늘어나면 안 됩니다.

세션 이름을 $1 로 받고, 이미 있으면 그대로 두고 성공해야 합니다. has-session 으로 확인할 수 있습니다.