tmux + screen — SSH disconnect không mất session

Tài liệu » Quản trị VPS - Server » tmux + screen — SSH disconnect không mất session

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: tmuxscreen 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)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ả tmuxscreen đề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ói screen. -y tự độ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ói tmux.

💡 Mẹo: Sau khi cài đặt, bạn có thể kiểm tra phiên bản bằng screen --version hoặc tmux -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ển screen đề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ên ten_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), screen sẽ 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 + a rồi nhấn c (create).
  • Chuyển đổi giữa các cửa sổ: Ctrl + a rồi nhấn n (next) hoặc p (previous).
  • Đóng cửa sổ hiện tại:exit hoặc nhấn Ctrl + d.
  • Chia màn hình theo chiều dọc: Ctrl + a rồi nhấn |.
  • Chuyển đổi giữa các khung: Ctrl + a rồi nhấn Tab.

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 + b rồi nhấn c.
  • Chuyển đổi giữa các cửa sổ: Ctrl + b rồi nhấn n (next) hoặc p (previous).
  • Đóng cửa sổ hiện tại:exit hoặc nhấn Ctrl + d.
  • Chia khung theo chiều dọc: Ctrl + b rồi nhấn %.
  • Chia khung theo chiều ngang: Ctrl + b rồi nhấn ".
  • Chuyển đổi giữa các khung: Ctrl + b rồi nhấn mũi tên (lên, xuống, trái, phải).
  • Thay đổi layout khung: Ctrl + b rồi nhấn Space.

💡 Mẹo: Bạn hoàn toàn có thể thay đổi prefix key mặc định của tmux (từ Ctrl + b sang Ctrl + a chẳ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.

  1. SSH vào server:
    bash
    ssh your_user@your_vps_ip

  2. Khở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
  3. 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 .

  4. 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 tmux hoặc screen.
    • 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ấn Ctrl + b rồi d.
      • Với screen: Nhấn Ctrl + a rồi d.

    Thông báo [detached] sẽ xuất hiện. Bạn có thể đóng terminal SSH của mình.

  5. 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.

💡 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+a hoặc Ctrl+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 + prefix rồ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.
  • Lỗi: Quên tên session và không thể reattach.

    • Cách fix: Sử dụng screen -ls hoặc tmux 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.
  • 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ới tmux, nó sẽ báo lỗi hoặc yêu cầu bạn dùng attach thay vì attach-session. Cách tốt nhất là luôn detach khỏi session trước khi đóng terminal SSH.
  • Lỗi: Mất cấu hình tmux sau khi reboot server.

    • Cách fix: File cấu hình tmux nằ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, tmuxscreen tự nó không bị mất khi reboot, chỉ là bạn cần SSH lại và reattach vào session.

Key takeaways

  • tmuxscreen là 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 sessionscreen -S <tên> hoặc tmux new-session -s <tên>.
  • Để thoát mà không dừng tiến trình, dùng lệnh detach: Ctrl+a rồi d (screen) hoặc Ctrl+b rồi d (tmux).
  • Để quay lại session, dùng lệnh reattach: screen -r <tên> hoặc tmux 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 tmuxCtrl + 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 screenCtrl + 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ả tmuxscreen đề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 tmuxscreen, 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!

Lên đầu trang