Làm chủ GNU Screen: Tuyệt chiêu giữ Terminal “sống sót” khi rớt mạng SSH

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Nỗi ác mộng mang tên “Broken Pipe” khi đang SSH

Nếu bạn thường xuyên quản lý server qua SSH, chắc hẳn đã từng nếm trải cảm giác này: Đang nén một file log 100GB hoặc chạy script migrate hàng triệu record database thì bỗng dưng mất mạng. Kết quả là session bị ngắt (Broken pipe), và tiến trình bạn đang chạy dở cũng dừng lại ngay lập tức. Công sức chờ đợi cả tiếng đồng hồ bỗng tan thành mây khói.

Thực tế, rớt mạng hay máy tính cá nhân bị sập nguồn là rủi ro không thể tránh khỏi. Để giải quyết triệt để, mình luôn sử dụng GNU Screen làm lớp “bảo hiểm” cho mọi tác vụ quan trọng. Công cụ này cho phép bạn tạo các phiên làm việc độc lập. Tiến trình của bạn vẫn sẽ chạy ngầm trên server ngay cả khi bạn tắt cửa sổ Terminal hoặc bị ngắt kết nối đột ngột.

Cài đặt GNU Screen trong 30 giây

Hầu hết các bản phân phối Linux hiện nay đều hỗ trợ Screen trong kho ứng dụng chính thức. Bạn chỉ mất vài giây để cài đặt.

Trên Ubuntu hoặc Debian:

sudo apt update && sudo apt install screen -y

Trên CentOS, AlmaLinux hoặc RHEL:

sudo dnf install screen -y

Cài xong, hãy gõ screen -v. Nếu thấy thông báo phiên bản hiện ra là bạn đã sẵn sàng “tham chiến”.

Các lệnh Screen “sống còn” cho DevOps

Điểm khác biệt nhất của Screen là tổ hợp phím điều khiển. Mọi thao tác đều bắt đầu bằng Ctrl+a (prefix key), sau đó mới nhấn phím chức năng.

1. Khởi tạo và đặt tên phiên làm việc

Đừng chỉ gõ screen khơi khơi vì sau này sẽ rất khó phân biệt. Hãy đặt tên gắn liền với mục đích công việc:

screen -S update_system

Lúc này, bạn đang ở trong một session an toàn. Giả sử bạn bắt đầu chạy yum update hoặc rsync dữ liệu lớn tại đây.

2. Rời đi (Detach) và Quay lại (Reattach)

Đây là tính năng đáng tiền nhất. Khi muốn để script tự chạy và tắt máy đi cafe, bạn nhấn Ctrl+a rồi nhấn d. Màn hình sẽ hiển thị thông báo [detached].

Vài tiếng sau, bạn login lại vào server từ một máy tính khác. Để kiểm tra danh sách session đang chạy, hãy dùng:

screen -ls

Để quay lại đúng phiên làm việc đang chạy dở:

screen -r update_system

3. Quản lý nhiều cửa sổ (Windows)

Thay vì tạo nhiều session rời rạc, bạn nên tạo nhiều cửa sổ trong cùng một session để dễ quản lý:

  • Ctrl+a c: Tạo thêm một cửa sổ mới (ví dụ: một cái chạy log, một cái gõ lệnh).
  • Ctrl+a n: Chuyển nhanh sang cửa sổ tiếp theo.
  • Ctrl+a “: Hiển thị danh sách cửa sổ dạng menu để chọn.

Tùy biến .screenrc để Terminal chuyên nghiệp hơn

Giao diện mặc định của Screen khá đơn điệu và dễ khiến bạn quên mình đang ở đâu. Mình thường thêm một thanh trạng thái (Status bar) ở cuối màn hình để theo dõi dễ dàng hơn.

Hãy mở file cấu hình: nano ~/.screenrc và dán đoạn mã sau:

startup_message off
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m/%d %{W}%c %{g}]'
defscrollback 10000

Cấu hình này giúp bạn thấy tên Hostname, danh sách các cửa sổ đang mở và ngày giờ ngay phía dưới. Đặc biệt, dòng defscrollback 10000 giúp bạn cuộn lên xem lại tới 10.000 dòng kết quả cũ.

Mẹo thực chiến: Debug cùng đồng nghiệp với screen -x

Có một tính năng cực hay mà ít người để ý: Multi-display. Nếu bạn đang gặp một lỗi khó và muốn nhờ đồng nghiệp xem hộ, cả hai hãy cùng login vào cùng một User trên server. Đồng nghiệp chỉ cần gõ:

screen -x [tên_session]

Ngay lập tức, hai người sẽ nhìn thấy chung một màn hình Terminal. Bạn gõ gì họ thấy đó và ngược lại. Đây là cách “pair programming” hoặc hướng dẫn newbie xử lý sự cố cực kỳ hiệu quả mà không cần cài thêm phần mềm bên thứ ba.

Tại sao vẫn là Screen khi đã có Tmux?

Nhiều người sẽ khuyên bạn dùng tmux vì nó hiện đại hơn. Tuy nhiên, trong túi đồ nghề của mình luôn có Screen. Lý do đơn giản: Screen cực kỳ nhẹ và có mặt trên hầu hết các hệ thống Linux đời cũ hoặc các bản Minimal install. Khi gặp những server khách hàng “đồ cổ”, Screen vẫn luôn hoạt động ổn định và tin cậy.

Lưu ý cuối cùng: Khi chạy các lệnh quan trọng trên Production, hãy luôn bật tính năng log bằng Ctrl+a H. Mọi thứ xuất hiện trên màn hình sẽ được ghi lại vào file screenlog.0, giúp bạn có bằng chứng để đối chiếu nếu có sự cố xảy ra.

Hy vọng thủ thuật này sẽ giúp bạn tự tin hơn khi quản lý server, không còn lo lắng về sự ổn định của đường truyền internet nữa.

Share: