Lệnh screen trong Linux — Quản lý phiên làm việc từ xa

Bạn đã bao giờ rơi vào tình huống đang thực hiện một tác vụ cập nhật hệ thống hoặc chạy một script quan trọng trên VPS, bỗng nhiên kết nối mạng bị ngắt đột ngột khiến mọi thứ dang dở và cực kỳ rủi ro chưa nhỉ? Với tư cách là một Senior System Admin, mình đã từng phải đối mặt với những "cơn ác mộng" như vậy khi quản lý các server từ xa. Nhưng đừng lo, tất nhiên là chúng ta luôn có giải pháp tối ưu để xử lý vấn đề này rồi, đúng không? screen là một công cụ quản lý terminal đa năng, cho phép bạn duy trì các phiên làm việc ngay cả khi mất kết nối. Vậy thực chất screen là gì và làm thế nào để làm chủ nó? Trong bài viết này, mình sẽ hướng dẫn bạn cách dùng screen một cách chi tiết nhất. Chúng ta sẽ cùng tìm hiểu về screen Linux để biết cách duy trì các tiến trình chạy ngầm trên vps một cách vô cùng an toàn và hiệu quả nhé!

Cần chuẩn bị gì trước khi dùng lệnh screen?

  • Quyền người dùng: Người dùng thông thường có thể sử dụng lệnh screen, tuy nhiên cần có quyền truy cập vào thư mục tạm (/run/screen hoặc /var/run/screen) để khởi tạo session.
  • Hệ điều hành hỗ trợ: Hầu hết các bản phân phối Linux (Ubuntu, Debian, CentOS, Fedora, RHEL) và macOS.
  • Gói phần mềm cần thiết: Nếu hệ thống chưa được cài đặt sẵn, hãy sử dụng các lệnh sau:
    • Trên Ubuntu/Debian: sudo apt update && sudo apt install screen
    • Trên CentOS/RHEL/Fedora: sudo yum install screen hoặc sudo dnf install screen
    • Trên macOS (sử dụng Homebrew): brew install screen

Cú pháp lệnh screen là gì?

Lệnh screen hỗ trợ nhiều dạng cú pháp khác nhau trên các hệ điều hành Linux/Unix để quản lý phiên làm việc.

screen [OPTIONS] [COMMAND [ARG]...]
screen -r [SESSION_ID]
screen -ls
Tôi đã sẵn sàng hỗ trợ bạn soạn phần "Tùy chọn thường dùng" cho lệnh Linux theo tiêu chuẩn đã nêu. Tuy nhiên, tôi cần bạn cung cấp thông tin về **lệnh cụ thể** mà bạn muốn viết tài liệu. Từ khóa bạn ghi là **[screen]**, vậy tôi sẽ giả định bạn cần soạn cho lệnh **screen**. ---

Các tùy chọn của lệnh screen là gì?

Lệnh screen cung cấp các tùy chọn để tạo phiên làm việc mới, kết nối đến phiên hiện có, quản lý cửa sổ và điều chỉnh chế độ hoạt động.

Tùy chọn ngắn Tùy chọn dài Mô tả
-S screen -S tên_phiên tạo phiên screen mới với tên cụ thể.
-r screen -r tên_phiên kết nối lại đến phiên screen đã tách rời.
-d screen -d tên_phiên tách rời phiên screen mà không đóng nó.
-ls screen -ls liệt kê tất cả phiên screen hiện có.
-x screen -x tên_phiên kết nối đồng thời đến phiên screen với người dùng khác.
-m screen -m bỏ qua tiếp tục phiên hiện có và tạo phiên mới.
-p screen -p số_cửa_sổ chỉ định cửa sổ mặc định khi tạo phiên.
-wipe screen -wipe xóa các phiên screen đã chết khỏi danh sách.
--- **Lưu ý:** Nếu bạn cần soạn tài liệu cho lệnh Linux **khác**, vui lòng cung cấp tên lệnh chính xác để tôi hoàn thành theo tiêu chuẩn.

xem thêm: Process Management

Cách sử dụng lệnh screen trong các tình huống thực tế?

Dưới đây là các kịch bản sử dụng lệnh screen phổ biến giúp duy trì các tiến trình chạy ngầm trên máy chủ từ xa.

screen là gì? [Khởi tạo một phiên làm việc mới]

$ screen
[Attached]
[screen is terminating]

Lệnh này tạo ra một phiên làm việc (session) mới trong môi trường terminal. Trong thực tế, đây là bước đầu tiên để tách biệt phiên làm việc của người dùng với kết nối SSH hiện tại.

screen -S {name} là gì? [Tạo phiên làm việc có tên định danh]

$ screen -S backup_process
[Attached]
[screen is terminating]

Tham số -S cho phép đặt tên cụ thể cho phiên làm việc thay vì để hệ thống tự cấp tên ngẫu nhiên. Trên môi trường production, việc đặt tên giúp quản trị viên dễ dàng nhận diện và quản lý nhiều tiến trình cùng lúc.

screen -ls là gì? [Liệt kê các phiên đang chạy]

$ screen -ls
There is a UNIX domain socket in /run/screen/S-user.
There are screens on:
	1234.backup_process	(Detached)
	5678.database_sync	(Detached)
2 Sockets in /run/screen/S-user.

Lệnh này hiển thị danh sách tất cả các phiên screen đang hoạt động cùng với PID và trạng thái của chúng. Đây là công cụ kiểm tra nhanh để xác định xem các tiến trình chạy ngầm có còn đang tồn tại hay không.

screen -r {name} là gì? [Kết nối lại phiên làm việc đã ngắt]

$ screen -r backup_process
[Kết nối lại vào phiên backup_process]

Tham số -r cho phép bạn kết nối lại (reattach) vào một phiên làm việc đang ở trạng thái Detached. Trong các trường hợp mất kết nối mạng đột ngột khi đang deploy ứng dụng, lệnh này giúp bạn quay lại đúng vị trí công việc đang dang dở.

screen -dr {name} là gì? [Ép buộc kết nối lại phiên làm việc]

$ screen -dr backup_process
[Reattach session backup_process (Detached)]

Lệnh này sẽ ngắt kết nối phiên đó ở mọi nơi khác và chuyển quyền kiểm soát về terminal hiện tại. Trong thực tế, khi một phiên làm việc bị treo ở trạng thái "Attached" do lỗi kết nối, tham số -dr là cách hiệu quả nhất để lấy lại quyền điều khiển mà không cần kill tiến trình.

Làm thế nào để xử lý các lỗi thường gặp khi sử dụng lệnh screen?

Trong quá trình quản trị hệ thống, người dùng thường gặp phải các tình huống liên quan đến quyền truy cập, phiên làm việc bị treo hoặc mất kết nối với session.

Lỗi không thể tạo session mới do thiếu quyền truy cập socket

$ screen
Must be connected to a terminal.

Lỗi này xảy ra khi lệnh được thực thi trong môi trường không có terminal tương tác hoặc người dùng không có quyền ghi vào thư mục tạm chứa socket của screen.

Lỗi không thể attach vào session do session đang được sử dụng ở nơi khác

$ screen -r my_session
There is no screen to be resumed matching my_session.

Tình huống này xuất hiện khi tên session không chính xác hoặc session đã bị đóng hoàn toàn thay vì chỉ đang chạy ngầm.

Lỗi chiếm quyền điều khiển session đang ở trạng thái Attached

$ screen -r my_session
There is no screens to be resumed matching my_session.
(Hoặc thông báo: Attached)

Khi một session đang được kết nối bởi một cửa sổ terminal khác, lệnh -r thông thường sẽ không cho phép truy cập trực tiếp.

Lỗi không tìm thấy session sau khi mất kết nối SSH

$ screen -ls
No Sockets found in /run/screen/S-user.

Kết quả này cho thấy tất cả các phiên làm việc đã bị đóng do tiến trình screen bị kill hoặc hệ thống đã khởi động lại, khiến các socket cũ không còn tồn tại.

Quy trình thực tế dùng screen trong quản trị Server Linux?

Trong kịch bản quản trị máy chủ từ xa, screen đóng vai trò quan trọng để duy trì các tiến trình chạy ngầm khi thực hiện các tác vụ tiêu tốn nhiều thời gian hoặc yêu cầu kết nối liên tục.

Bước 1: Khởi tạo phiên làm việc mới

screen -S backup_session

Lệnh này cho phép bạn tạo một phiên làm việc (session) mới với tên định danh là backup_session để dễ dàng quản lý.

Bước 2: Thực hiện tác vụ và ngắt kết nối tạm thời

tar -czf backup.tar.gz /var/www/html
# Sau khi nhấn Ctrl + A rồi nhấn D
[detached from backup_session]

Sau khi kích hoạt lệnh nén dữ liệu, bạn sử dụng tổ hợp phím để tách (detach) khỏi phiên làm việc, cho phép kết nối SSH có thể ngắt mà không làm dừng tiến trình.

Bước 3: Kiểm tra danh sách các phiên đang chạy

screen -ls
There is a screen on:
        1234.backup_session	(Detached)
1 Socket in /run/screen/S-user.

Lệnh này cho phép bạn xác nhận trạng thái của các phiên làm việc đang chạy ngầm trong hệ thống.

Bước 4: Truy cập lại vào phiên làm việc cũ

screen -r backup_session

Lệnh này cho phép bạn tái kết nối (reattach) vào phiên làm việc đã tách trước đó để kiểm tra kết quả hoàn thành của tác vụ.

Việc sử dụng screen trên VPS đòi hỏi sự hiểu biết về cơ chế quản lý session để tránh mất mát dữ liệu khi kết nối SSH bị ngắt. Trong các trường hợp deploy script hoặc chạy tiến trình nền kéo dài, người dùng thường quên lệnh detach (Ctrl+A, D) dẫn đến việc tiến trình bị dừng ngay khi đóng cửa sổ terminal. Khi quản lý VPS, việc sử dụng lệnh screen -ls giúp kiểm tra danh sách các session đang hoạt động để tránh khởi tạo trùng lặp. Một lỗi phổ biến là người dùng cố gắng dùng lệnh screen -r khi session đang ở trạng thái "Attached", gây ra lỗi không thể kết nối lại. Trong tình huống này, cần sử dụng cú pháp screen -d -r [session_id] để buộc session cũ ngắt kết nối trước khi truy cập lại. Việc quản lý session không hiệu quả trên VPS có thể dẫn đến tình trạng tiêu tốn tài nguyên hệ thống bởi các tiến trình chạy ngầm không được kiểm soát.

Những câu hỏi thường gặp về lệnh screen?

Dưới đây là tổng hợp các thắc mắc phổ biến nhất khi người dùng bắt đầu sử dụng công cụ quản lý phiên làm việc screen.

Làm cách nào để tạo một phiên làm việc mới với tên riêng biệt?

Việc đặt tên giúp bạn dễ dàng quản lý và nhận diện các phiên làm việc khác nhau khi có nhiều session đang chạy.

screen -S backup_process
[screen is terminating]

Làm thế nào để thoát khỏi một phiên làm việc mà không làm dừng các tiến trình đang chạy?

Bạn sử dụng tổ hợp phím Detach để đưa phiên làm việc vào chế độ chạy ngầm, cho phép bạn tiếp tục sử dụng terminal khác.

# Nhấn tổ hợp phím: Ctrl + A sau đó nhấn phím D
[detached from 1234.backup_process]

Làm cách nào để liệt kê tất cả các phiên screen đang hoạt động?

Lệnh này cho phép bạn xem danh sách các session hiện có cùng với ID của chúng để chuẩn bị kết nối lại.

screen -ls
There is a Window in screen:
        1234.backup_process	(Detached)

Làm cách nào để kết nối lại vào một phiên làm việc đang chạy ngầm?

Bạn sử dụng tùy chọn resume để quay trở lại giao diện của phiên làm việc đã detach trước đó.

screen -r backup_process
[Kết nối lại vào session backup_process]

Làm cách nào để buộc một phiên làm việc đang bị kẹt phải thoát ra?

Trong trường hợp phiên làm việc ở trạng thái Attached nhưng bạn không thể truy cập, tùy chọn -d giúp ngắt kết nối đó trước khi kết nối lại.

screen -rd backup_process
[Attached to 1234.backup_process]

Làm cách nào để đóng hoàn toàn một phiên làm việc screen?

Bạn có thể sử dụng lệnh quit bên trong session hoặc dùng lệnh terminate từ bên ngoài để xóa bỏ phiên làm việc.

screen -X -S backup_process quit
[No message displayed]

Lệnh screen là một công cụ mạnh mẽ giúp bạn quản lý các phiên làm việc terminal và duy trì các tiến trình chạy ngầm ngay cả khi mất kết nối SSH. Bạn có thể tận dụng tham số -d để ngắt kết nối một phiên làm việc từ xa, hoặc sử dụng -r để kết nối lại một phiên đang chạy cực kỳ tiện lợi, đúng không nhỉ? Việc làm chủ các tùy chọn này sẽ giúp công việc quản trị hệ thống của bạn trở nên vô cùng linh hoạt và chuyên nghiệp hơn bao giờ hết. Hy vọng những chia sẻ trên sẽ giúp bạn làm chủ được môi trường làm việc của mình. Chúc bạn thành công!