1. tmux란 무엇인가?
tmux(terminal multiplexer)는 터미널 세션을 다중화해주는 툴입니다.
- 하나의 SSH 세션에서 여러 개의 터미널 창(윈도우)과 여러 개의 패널(창 분할)을 동시에 사용할 수 있습니다.
- SSH 세션이 끊겨도 tmux 세션은 계속 살아 있어서, 재접속 후 동일한 세션을 다시 사용할 수 있습니다(즉, 터미널을 언제나 켜 놓고 있다고 생각하면 좋습니다).
회사 서버를 사용하면서 백그라운드에서 R 스크립트를 실행시키거나, 로그를 모니터링하거나, 동시에 여러 작업을 처리해야 할 때 편리합니다.
기존에도 nohup을 안내하고 있었지만, nohup은 실행 상황을 모니터링하기 어렵고, 추가 작업을 진행하기 곤란(새롭게 실행해야 함)한 반면, tmux를 사용하면 다수의 터미널을 이용하여 여러 작업을 분리하여 실행할 수 있습니다.
2. 설치하기
- 차라투 인턴십 서버에는 기본적으로 설치되어 있으나, 개별 서버 이용자들을 위해 안내합니다.
- 우분투/데비안 계열:
sudo apt-get update
sudo apt-get install tmux
- 버전 확인
tmux -V
글 작성일(2024년 12월 28일) 기준 최신버전은 tmux 3.2a
입니다.
3. 기본 사용법
3.1. 세션 생성
SSH로 서버에 접속한 뒤, 다음 명령을 사용해 새 tmux 세션을 생성합니다.
tmux new -s mysession
- -s mysession 옵션을 통해 세션에 이름을 부여합니다.
- 세션 이름을 생략하면 자동으로 이름이 부여됩니다.
세션에 진입하면 평소 사용하는 터미널과 큰 차이가 없는 것처럼 보입니다. 여기서 시간이 오래 걸리는 작업을 실행(예: Rscript long_time_job.R
) 해 보세요. 다음 문단의 명령어를 통해 이를 백그라운드에서 실행할 수 있습니다.
3.2. 세션에서 빠져나오기(Detach)
tmux 세션은 “분리(detach)” 하고 다시 붙을(attach) 수 있습니다.
- Detach 단축키: Ctrl + b 누른 뒤, d → 즉,
Ctrl
과b
는 함께 누른 후, 키보드에서 한번 손을 뗀 다음d
를 입력해야 합니다. - 즉, tmux 내부에서 Ctrl + b, d를 순서대로 누르면 세션이 detach(분리)됩니다.
- 분리된 상태에서 서버에서 로그아웃해도 tmux 세션은 계속 살아 있으며, 그 안에서 진행 중인 모든 작업이 백그라운드에서 계속됩니다.
3.3. 세션 재접속(Attach)
재접속 후, 다음 명령어로 기존 세션에 다시 접속할 수 있습니다.
tmux attach -t mysession
만약 이름 없는 세션이 하나 존재한다면,
tmux attach
로도 재접속할 수 있습니다. 만약 R 파일에 로그 기능을 추가했다면, 진행 상황을 확인할 수 있을 것입니다.
3.4. 세션 목록 확인
다음 명령어로 서버에 있는 tmux 세션을 확인할 수 있습니다.
tmux ls
- 각 세션의 이름, 번호, 실행 시간 등을 볼 수 있습니다.
- 여러 세션이 있을 때는 -t 옵션 뒤에 세션 이름을 정확히 입력해 attach 해야 합니다.
4. 윈도우/패널 관리
tmux 내부에 진입한 뒤에는 여러 “윈도우(창)”와 “패널(분할된 창)”을 만들어서 동시에 다양한 작업을 진행할 수 있습니다.
4.1. 윈도우(Window)
- 새 윈도우 만들기:
Ctrl + b, c
- 작업 중인 세션 안에서 또 다른 창을 만들어서, 다른 작업을 진행할 수 있습니다.
- 윈도우 간 이동:
Ctrl + b, n
(다음 윈도우),Ctrl + b, p
(이전 윈도우)- 혹은
Ctrl + b, 숫자
(예: Ctrl + b, 2)로 바로 해당 번호의 윈도우로 이동할 수 있습니다.
- 혹은
- 윈도우 이름 변경:
Ctrl + b, , (쉼표)
- 쉼표를 누르면 윈도우 이름을 바꿀 수 있는 프롬프트가 나타납니다(화면 하단 초록 상태바가 노랗게 변합니다).
4.2. 패널(Pane)
- 패널 수직 분할:
Ctrl + b, %
- 현재 윈도우를 수직으로 나누어 두 개의 패널을 만듭니다.
- 패널 수평 분할:
Ctrl + b, " (큰따옴표)
- 현재 윈도우를 수평으로 나누어 두 개의 패널을 만듭니다.
- 패널 간 이동:
Ctrl + b, 방향키
- 방향키(↑, ↓, ←, →)를 통해 다른 패널로 이동할 수 있습니다.
- 패널 닫기: 패널 안에서
exit
를 입력하거나Ctrl + d
로 해당 쉘을 종료하면 패널이 닫힙니다.
패널을 여러 개 열어두고, 한쪽에는 R 스크립트를 실행(예: Rscript my_long_running_script.R
)하고, 다른 한쪽에서는 로그 파일을 tail
로 모니터링 하는 식으로 사용할 수 있습니다.
5. tmux 설정 파일(.tmux.conf) 활용하기
tmux의 기본 단축키나 상태 표시줄 등을 커스터마이징 하려면 홈 디렉토리에 .tmux.conf
파일을 만들어 설정할 수 있습니다.
예를 들어, 저의 경우 /home/limcw/.tmux.conf
파일을 통해 설정을 커스텀할 수 있습니다.
파일을 수정한 뒤에는 tmux 내부에서 다음 명령으로 설정을 재로드하면 됩니다.
tmux source-file ~/.tmux.conf
상세한 설정 방법은 GPT나 인터넷 검색을 활용하여 찾아보시면 좋습니다.
6. FAQ
- tmux 세션이 너무 많아졌을 때 어떻게 하나요?
- tmux ls로 확인 후, 사용하지 않는 세션에 접속(
tmux attach -t <session_name>
)해서exit
명령어로 종료하면 세션이 삭제됩니다. - 또는
tmux kill-session -t <session_name>
명령으로 세션을 직접 종료할 수도 있습니다.
- tmux ls로 확인 후, 사용하지 않는 세션에 접속(
- tmux 세션이 종료된 다음에도 프로세스가 계속 남아있나요?
- 일반적으로 tmux 세션이
exit
로 완전히 종료되면(세션이 죽으면) 그 안의 작업도 함께 종료됩니다.
- 일반적으로 tmux 세션이
- 서버 재부팅 후에는 tmux 세션이 어떻게 되나요?
- 메모리에 존재하는 세션이기 때문에 서버가 재부팅되면 모든 tmux 세션이 사라집니다. 인턴십 서버는 여럿이 사용하는 서버이고, 필요에 따라 서비스가 재시작 될 수 있기 때문에 이에 유의하여야 합니다.
- 재부팅 후에는 다시 tmux 세션을 생성해야 합니다.