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 scriptlong_process.sh
bằngnohup
.> ~/project/output.log
: Chuyển hướng đầu ra tiêu chuẩn (stdout) của tiến trình đến tập tinoutput.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
.