Vì sao cần tmux/screen ngay? — mất tiến trình build khi ngắt mạng 😭
- Đang build Docker image tốn cả tiếng đồng hồ, mạng lag cái bụp, mất hết công sức.
- Chạy script cập nhật hệ thống dài hơi, lỡ tay tắt terminal, server boot lại không hoạt động.
- Di chuyển giữa các máy chủ để quản lý, mỗi lần SSH lại phải khởi động lại tiến trình.
- Cần giữ session chạy background task như deploy code, không muốn nó bị kill.
Giới thiệu về tmux và screen — “bảo hiểm” cho SSH session của bạn
Tóm gọn: tmux và screen là hai công cụ mạnh mẽ giúp bạn tạo và quản lý các “phiên làm việc” (session) trên máy chủ. Điều này cho phép bạn thoát SSH mà không làm gián đoạn các tiến trình đang chạy bên trong session đó.
Screen: Người tiền nhiệm kinh điển
screen là một chương trình quản lý terminal multiplexer ra đời từ rất sớm. Nó cho phép bạn:
- Tạo nhiều cửa sổ terminal trong một kết nối SSH duy nhất.
- Tách (detach) khỏi một session đang chạy và kết nối lại (reattach) sau này.
- Chia màn hình để xem nhiều cửa sổ cùng lúc.
Tmux: Phiên bản hiện đại và linh hoạt hơn
tmux (Terminal Multiplexer) là một giải pháp hiện đại hơn, cung cấp nhiều tính năng và khả năng tùy biến cao hơn screen.
- Tạo nhiều cửa sổ (window) và chia khung (pane) trong mỗi cửa sổ.
- Dễ dàng chuyển đổi giữa các cửa sổ và khung.
- Cấu hình mạnh mẽ thông qua file
~/.tmux.conf. - Hỗ trợ chuột tốt hơn.
Cả hai công cụ đều giải quyết cùng một vấn đề cốt lõi: làm cho các tiến trình chạy trên SSH không bị ảnh hưởng khi kết nối mạng bị gián đoạn.
Cài đặt tmux và screen trên Ubuntu
Tóm gọn: Cả tmux và screen đều có sẵn trong kho ứng dụng mặc định của Ubuntu, việc cài đặt chỉ đơn giản là vài lệnh apt.
Cài đặt screen
Mở terminal SSH của bạn và chạy lệnh sau:
sudo apt update
sudo apt install screen -y
sudo apt update: Cập nhật danh sách các gói phần mềm có sẵn.sudo apt install screen -y: Cài đặt góiscreen.-ytự động chấp nhận mọi prompt xác nhận.
Cài đặt tmux
Tương tự, để cài đặt tmux, bạn chạy:
sudo apt update
sudo apt install tmux -y
sudo apt update: Luôn là bước đầu tiên để đảm bảo bạn cài đặt phiên bản mới nhất.sudo apt install tmux -y: Cài đặt góitmux.
💡 Mẹo: Sau khi cài đặt, bạn có thể kiểm tra phiên bản bằng
screen --versionhoặctmux -V.
Sử dụng screen để không mất session
Tóm gọn: screen cho phép bạn tạo một “phiên làm việc ảo” để chạy các tiến trình. Khi bạn ngắt kết nối SSH, phiên làm việc này vẫn tiếp tục chạy trên máy chủ.
Khởi tạo và đặt tên cho một session screen
Để bắt đầu một session mới, bạn dùng lệnh:
screen -S ten_session_cua_ban
-S ten_session_cua_ban: Tạo một session mới và đặt tên cho nó làten_session_cua_ban. Việc đặt tên giúp bạn dễ dàng nhận diện các session khi có nhiều session chạy cùng lúc.
Sau khi chạy lệnh này, bạn sẽ thấy màn hình terminal “sạch sẽ” như vừa SSH vào. Mọi lệnh bạn chạy bây giờ sẽ nằm trong session ten_session_cua_ban.
Thoát khỏi session screen (detach)
Khi bạn muốn ngắt kết nối SSH mà vẫn giữ session chạy, hãy nhấn tổ hợp phím:
Ctrl + a rồi nhấn d
- Ctrl + a: Đây là tổ hợp phím “tiền tố” (prefix key) mặc định của
screen. Mọi lệnh điều khiểnscreenđều bắt đầu bằng tổ hợp này. - d: Lệnh “detach”, tức là tách phiên làm việc hiện tại ra khỏi terminal.
Sau khi nhấn Ctrl + a rồi d, bạn sẽ quay trở lại terminal SSH ban đầu và thấy thông báo:
[detached from ...]
Lúc này, session ten_session_cua_ban của bạn vẫn đang chạy trên máy chủ.
Kết nối lại vào session screen (reattach)
Để quay lại session đã tách, bạn sử dụng lệnh:
screen -r ten_session_cua_ban
-r ten_session_cua_ban: Lệnh “reattach”, kết nối lại vào session có tênten_session_cua_ban.
Nếu bạn chỉ có một session đang chạy, bạn có thể chỉ cần gõ screen -r mà không cần tên session.
Liệt kê các session screen đang chạy
Để xem tất cả các session screen đang hoạt động, bạn dùng:
screen -ls
Hoặc viết tắt:
screen -list
Output mẫu sẽ trông như sau:
There are screens on:
12345.ten_session_cua_ban (Detached)
67890.session_khac (Attached)
2 Sockets in /run/screen/S-youruser.
Bạn có thể thấy ID của session (ví dụ: 12345) và tên session.
⚠️ Cảnh báo: Nếu bạn cố gắng reattach vào một session đang ở trạng thái “Attached” (đang có người dùng kết nối),
screensẽ hỏi bạn có muốn “multi-display mode” hay không. Thường thì bạn chỉ nên reattach vào session “Detached”.
Các lệnh screen hữu ích khác
- Tạo cửa sổ mới:
Ctrl + arồi nhấnc(create). - Chuyển đổi giữa các cửa sổ:
Ctrl + arồi nhấnn(next) hoặcp(previous). - Đóng cửa sổ hiện tại: Gõ
exithoặc nhấnCtrl + d. - Chia màn hình theo chiều dọc:
Ctrl + arồi nhấn|. - Chuyển đổi giữa các khung:
Ctrl + arồi nhấnTab.
Sử dụng tmux để không mất session
Tóm gọn: tmux cũng hoạt động tương tự screen về mặt tạo session và cho phép detach/reattach, nhưng có cú pháp và tính năng mạnh mẽ hơn.
Khởi tạo và đặt tên cho một session tmux
Để bắt đầu một session mới với tmux:
tmux new-session -s ten_session_cua_ban
new-session: Tạo một session mới.-s ten_session_cua_ban: Đặt tên cho session.
Tương tự screen, bạn sẽ vào một giao diện terminal mới, mọi thứ chạy ở đây thuộc về session ten_session_cua_ban.
Thoát khỏi session tmux (detach)
Để tách khỏi session tmux mà không làm gián đoạn tiến trình:
Nhấn tổ hợp phím: Ctrl + b rồi nhấn d
- Ctrl + b: Đây là tổ hợp phím “tiền tố” (prefix key) mặc định của
tmux. - d: Lệnh “detach”.
Bạn sẽ thấy thông báo:
[detached (from session ten_session_cua_ban)]
Session của bạn vẫn tiếp tục chạy trên server.
Kết nối lại vào session tmux (reattach)
Để kết nối lại vào một session tmux đã tách:
tmux attach-session -t ten_session_cua_ban
attach-session: Kết nối lại vào một session.-t ten_session_cua_ban: Chỉ định tên (target) của session.
Nếu chỉ có một session đang chạy, bạn có thể dùng tmux attach hoặc tmux a.
Liệt kê các session tmux đang chạy
Để xem danh sách các session tmux đang hoạt động:
tmux list-sessions
Hoặc viết tắt:
tmux ls
Output mẫu:
ten_session_cua_ban: 1 windows (created Mon YYYY-MM-DD HH:MM:SS) [80x24]
session_khac: 2 windows (created Mon YYYY-MM-DD HH:MM:SS) [120x30]
Các lệnh tmux hữu ích khác
tmux có một hệ thống phím tắt rất phong phú. Dưới đây là một vài lệnh cơ bản:
- Tạo cửa sổ mới:
Ctrl + brồi nhấnc. - Chuyển đổi giữa các cửa sổ:
Ctrl + brồi nhấnn(next) hoặcp(previous). - Đóng cửa sổ hiện tại: Gõ
exithoặc nhấnCtrl + d. - Chia khung theo chiều dọc:
Ctrl + brồi nhấn%. - Chia khung theo chiều ngang:
Ctrl + brồi nhấn". - Chuyển đổi giữa các khung:
Ctrl + brồi nhấn mũi tên (lên, xuống, trái, phải). - Thay đổi layout khung:
Ctrl + brồi nhấnSpace.
💡 Mẹo: Bạn hoàn toàn có thể thay đổi prefix key mặc định của
tmux(từCtrl + bsangCtrl + achẳng hạn) bằng cách chỉnh sửa file cấu hình~/.tmux.conf.
Ví dụ thực tế: Build Docker image không sợ mất kết nối
Tóm gọn: Sử dụng tmux hoặc screen là cách hiệu quả để đảm bảo quá trình build Docker image, vốn có thể kéo dài, không bị gián đoạn bởi sự cố mạng.
Giả sử bạn đang chuẩn bị build một Docker image phức tạp, mất nhiều thời gian.
SSH vào server:
bash
ssh your_user@your_vps_ipKhởi tạo một session tmux hoặc screen:
- Với
tmux:
bash
tmux new-session -s build_docker - Với
screen:
bash
screen -S build_docker
- Với
Di chuyển vào thư mục chứa Dockerfile và bắt đầu build:
bash
cd /path/to/your/project
docker build -t your_image_name .Tiến hành công việc khác hoặc ngắt kết nối:
- Nếu bạn muốn tiếp tục làm việc khác trên cùng server, bạn có thể tạo thêm cửa sổ/khung trong
tmuxhoặcscreen. - Khi công việc build đang chạy và bạn muốn ngắt kết nối SSH:
- Với
tmux: NhấnCtrl + brồid. - Với
screen: NhấnCtrl + arồid.
- Với
Thông báo
[detached]sẽ xuất hiện. Bạn có thể đóng terminal SSH của mình.- Nếu bạn muốn tiếp tục làm việc khác trên cùng server, bạn có thể tạo thêm cửa sổ/khung trong
Kiểm tra lại tiến trình build:
Sau một thời gian, bạn có thể SSH lại vào server và kết nối lại vào session:- Với
tmux:
bash
tmux attach-session -t build_docker - Với
screen:
bash
screen -r build_docker
Bạn sẽ thấy terminal hiện ra đúng chỗ bạn đã rời đi, với tiến trình build Docker image vẫn đang tiếp diễn hoặc đã hoàn thành.
- Với
💡 Mẹo: Đặt tên session có ý nghĩa (như
build_docker,deploy_app,long_script_run) giúp bạn quản lý dễ dàng hơn khi có nhiều session chạy song song.
Pitfalls & lỗi thường gặp
Tóm gọn: Mặc dù mạnh mẽ, người dùng mới có thể gặp một số lỗi cơ bản khi sử dụng tmux hoặc screen.
Lỗi: Nhấn tổ hợp phím prefix (
Ctrl+ahoặcCtrl+b) rồi nhấn phím lệnh ngay lập tức mà không có khoảng dừng.- Cách fix: Luôn nhấn
Ctrl + prefixrồi thả ra, sau đó mới nhấn phím lệnh (ví dụ:dđể detach). Cần một chút thời gian để làm quen với nhịp bấm này.
- Cách fix: Luôn nhấn
Lỗi: Quên tên session và không thể reattach.
- Cách fix: Sử dụng
screen -lshoặctmux lsđể liệt kê tất cả các session đang chạy. Nếu quên cả tên và ID, bạn có thể phải khởi tạo lại session mới.
- Cách fix: Sử dụng
Lỗi: Cố gắng reattach vào một session đang “Attached” (đã có người dùng kết nối).
- Cách fix: Với
screen, nó sẽ hỏi bạn có muốn vào chế độ “multi-display” không. Thường thì bạn nên tránh điều này nếu không chắc chắn. Vớitmux, nó sẽ báo lỗi hoặc yêu cầu bạn dùngattachthay vìattach-session. Cách tốt nhất là luôn detach khỏi session trước khi đóng terminal SSH.
- Cách fix: Với
Lỗi: Mất cấu hình
tmuxsau khi reboot server.- Cách fix: File cấu hình
tmuxnằm ở~/.tmux.conf. Đảm bảo file này được lưu trữ đúng cách hoặc được cấu hình để tự động khởi tạo các session cần thiết nếu cần. Tuy nhiên,tmuxvàscreentự nó không bị mất khi reboot, chỉ là bạn cần SSH lại và reattach vào session.
- Cách fix: File cấu hình
Key takeaways
tmuxvàscreenlà công cụ thiết yếu để chống mất tiến trình khi kết nối SSH bị gián đoạn.- Chúng hoạt động bằng cách cho phép bạn tạo và quản lý các “phiên làm việc” (session) chạy độc lập trên server.
- Lệnh chính để tạo session là
screen -S <tên>hoặctmux new-session -s <tên>. - Để thoát mà không dừng tiến trình, dùng lệnh
detach:Ctrl+arồid(screen) hoặcCtrl+brồid(tmux). - Để quay lại session, dùng lệnh
reattach:screen -r <tên>hoặctmux attach-session -t <tên>.
FAQ
H3: tmux và screen có giống nhau không?
Về cơ bản, cả hai đều làm cùng một việc: quản lý terminal multiplexer. Tuy nhiên, tmux hiện đại hơn, linh hoạt hơn và có nhiều tính năng hơn.
H3: Tôi có thể chạy cả tmux và screen cùng lúc không?
Có, bạn hoàn toàn có thể cài đặt và sử dụng cả hai công cụ trên cùng một hệ thống.
H3: Prefix key mặc định của tmux là gì?
Prefix key mặc định của tmux là Ctrl + b. Bạn có thể thay đổi nó trong file cấu hình ~/.tmux.conf.
H3: Prefix key mặc định của screen là gì?
Prefix key mặc định của screen là Ctrl + a.
H3: Làm sao để biết session nào đang chạy tiến trình quan trọng?
Bạn nên đặt tên session có ý nghĩa khi tạo. Khi reattach, bạn có thể xem lại các tiến trình đang chạy trong đó.
H3: Tôi có thể chia sẻ session với người khác không?
Có, cả tmux và screen đều hỗ trợ chế độ “multi-display” hoặc chia sẻ session, nhưng việc cấu hình có thể phức tạp hơn và cần cẩn trọng về bảo mật.
Cần VPS chạy Linux mượt mà cho mọi tác vụ?
Đừng để mất kết nối mạng làm gián đoạn công việc quan trọng của bạn. Với tmux và screen, bạn có thể yên tâm chạy các tiến trình dài hơi trên VPS.
Tại vsis.net, chúng tôi cung cấp các giải pháp VPS cấu hình mạnh mẽ, kết nối ổn định, là nền tảng lý tưởng để bạn triển khai mọi ứng dụng, từ web server, database đến các tác vụ build phức tạp. Chọn ngay VPS tại vsis.net/vps để trải nghiệm sự khác biệt!



