Lệnh nohup trong Linux

Giới thiệu

Trong lab này, bạn sẽ học cách sử dụng lệnh nohup của Linux để chạy các tiến trình chạy dài trong nền, ngay cả sau khi bạn đăng xuất khỏi phiên terminal của mình. Bạn sẽ hiểu mục đích của lệnh nohup, chạy một tiến trình chạy dài bằng nohup và chuyển hướng đầu ra đến một tập tin. Lab này bao gồm các ví dụ thực tế về quản lý tiến trình trong môi trường Linux.

Lệnh nohup cho phép bạn chạy một tiến trình mà sẽ tiếp tục thực thi ngay cả sau khi bạn đăng xuất, ngăn tiến trình bị chấm dứt. Bạn sẽ bắt đầu bằng cách chạy một lệnh đơn giản bằng nohup và xác minh rằng tiến trình vẫn đang chạy. Sau đó, bạn sẽ tạo một script chạy một tiến trình chạy dài và sử dụng nohup để chạy nó trong nền, với đầu ra được lưu vào một tập tin.

Tìm hiểu Mục đích của Lệnh nohup

Trong bước này, bạn sẽ tìm hiểu về mục đích của lệnh nohup trong Linux. Lệnh nohup được sử dụng để chạy một lệnh hoặc script trong nền, ngay cả sau khi bạn đăng xuất khỏi phiên terminal của mình.

Khi bạn chạy một tiến trình chạy dài trong một terminal, nó sẽ bị chấm dứt nếu bạn đăng xuất hoặc đóng cửa sổ terminal. Lệnh nohup cho phép bạn chạy một tiến trình mà sẽ tiếp tục chạy ngay cả sau khi bạn đăng xuất, ngăn tiến trình bị chấm dứt.

Hãy bắt đầu bằng cách chạy một lệnh đơn giản bằng nohup:

nohup sleep 60 &

Lệnh này sẽ chạy lệnh sleep 60 trong nền và đầu ra sẽ được lưu vào một tập tin có tên nohup.out trong thư mục hiện tại.

Ví dụ về đầu ra:

[1] 12345

Dấu & ở cuối lệnh chạy tiến trình trong nền và đầu ra hiển thị ID tiến trình (PID) của tiến trình nền.

Để xác minh rằng tiến trình vẫn đang chạy, bạn có thể sử dụng lệnh ps:

ps aux | grep sleep

Ví dụ về đầu ra:

labex     12345  0.0  0.0   8184   712 pts/0    S    14:20   0:00 sleep 60

Như bạn có thể thấy, tiến trình sleep 60 vẫn đang chạy, ngay cả khi chúng ta đã đăng xuất khỏi terminal.

Chạy Tiến trình Chạy Dài bằng nohup

Trong bước này, bạn sẽ học cách sử dụng lệnh nohup để chạy một tiến trình chạy dài trong nền.

Hãy bắt đầu bằng cách tạo một script đơn giản chạy một tiến trình chạy dài. Tạo một tập tin mới có tên long_process.sh trong thư mục ~/project với nội dung sau:

#!/bin/bash
echo "Starting long-running process..."
sleep 120
echo "Long-running process completed."

Làm cho script có thể thực thi:

chmod +x ~/project/long_process.sh

Bây giờ, hãy chạy script bằng nohup:

nohup ~/project/long_process.sh &

Lệnh này sẽ bắt đầu tiến trình chạy dài trong nền và đầu ra sẽ được lưu vào một tập tin có tên nohup.out trong thư mục hiện tại.

Ví dụ về đầu ra:

[1] 12345

Đầu ra hiển thị ID tiến trình (PID) của tiến trình nền.

Để xác minh rằng tiến trình vẫn đang chạy, bạn có thể sử dụng lệnh ps:

ps aux | grep long_process.sh

Ví dụ về đầu ra:

labex     12345  0.0  0.0   8184   712 pts/0    S    14:20   0:00 /bin/bash /home/labex/project/long_process.sh

Như bạn có thể thấy, tiến trình chạy dài vẫn đang chạy, ngay cả khi chúng ta đã đăng xuất khỏi terminal.

Chuyển hướng Đầu ra nohup đến Tập tin

Trong bước này, bạn sẽ học cách chuyển hướng đầu ra của một tiến trình chạy dài được bắt đầu bằng nohup đến một tập tin tùy chỉnh thay vì tập tin nohup.out mặc định.

Hãy bắt đầu bằng cách chạy một tiến trình chạy dài và chuyển hướng đầu ra của nó đến một tập tin tùy chỉnh:

nohup ~/project/long_process.sh > ~/project/output.log 2>&1 &

Đây là những gì mỗi phần của lệnh thực hiện:

  • nohup ~/project/long_process.sh: Chạy script long_process.sh bằng nohup.
  • > ~/project/output.log: Chuyển hướng đầu ra tiêu chuẩn (stdout) của tiến trình đến tập tin output.log trong thư mục ~/project.
  • 2>&1: Chuyển hướng lỗi tiêu chuẩn (stderr) của tiến trình đến cùng một tập tin với đầu ra tiêu chuẩn.
  • &: Chạy tiến trình trong nền.

Để xác minh rằng tiến trình vẫn đang chạy và đầu ra đang được chuyển hướng đến tập tin tùy chỉnh, bạn có thể sử dụng các lệnh sau:

ps aux | grep long_process.sh
cat ~/project/output.log

Lệnh ps sẽ hiển thị rằng tiến trình chạy dài vẫn đang chạy và lệnh cat sẽ hiển thị nội dung của tập tin output.log.

Tóm tắt

Trong lab này, bạn đã tìm hiểu về mục đích của lệnh nohup trong Linux, lệnh này cho phép bạn chạy một tiến trình chạy dài trong nền, ngay cả sau khi bạn đăng xuất khỏi phiên terminal của mình. Bạn bắt đầu bằng cách chạy một lệnh sleep 60 đơn giản bằng nohup và sau đó xác minh rằng tiến trình vẫn đang chạy bằng lệnh ps. Tiếp theo, bạn đã tạo một script chạy một tiến trình chạy dài và sử dụng nohup để chạy nó trong nền, với đầu ra được lưu vào một tập tin có tên nohup.out.

Last Updated : 10/05/2025

400+ câu lệnh phổ biến trong Linux