Giảm 50% tất cả các gói, thời gian có hạn. Bắt đầu từ $2.48/mo
8 phút còn lại
Máy chủ & Hệ điều hành

Cách lệnh nohup hoạt động trong Linux – cú pháp, trường hợp sử dụng và ví dụ

Ada Lovegood By Ada Lovegood 8 phút đọc Cập nhật 14 tháng 7, 2024
lệnh nohup

Nếu bạn là nhà phát triển Linux, bạn sẽ hiểu tầm quan trọng của tính nhất quán và độ tin cậy của phiên làm việc của mình. Các quá trình chạy lâu dài trên Linux cần tiếp tục ngay cả sau khi bạn đăng xuất khỏi phiên. May mắn thay, Linux có lệnh chức năng cho mục đích này. Lệnh lệnh nohup cho phép bạn giữ các lệnh chạy liên tục ở nền. Cách này ngăn chặn mất dữ liệu và tiết kiệm thời gian quý báu. Hướng dẫn này sẽ đưa bạn qua tất cả những gì bạn cần biết về lệnh nohup Linux, từ cú pháp, tùy chọn cho đến các ví dụ thực tế và cách khắc phục các lỗi thường gặp.

Hiểu cú pháp Nohup Linux

Lệnh nohup dễ sử dụng và rõ ràng. Nó cho phép bạn chạy các lệnh hoặc tập lệnh ở nền để chắc chắn chúng tiếp tục thực thi ngay cả sau khi bạn đăng xuất khỏi terminal. Dưới đây là cách sử dụng:

nohup [command] [arguments] &

Bạn nên thay thế [command] bằng lệnh hoặc script mà bạn muốn chạy. Và [argument] là các tham số hoặc tùy chọn mà lệnh yêu cầu. Ký hiệu & gửi lệnh để chạy ở nền. Hãy xem một ví dụ:

nohup myscript.sh &

Trong ví dụ này, myscript.sh là một bash script sẽ tiếp tục chạy ngay cả khi bạn đóng terminal. Output sẽ được chuyển hướng đến một file tên là nohup.out theo mặc định trừ khi bạn chỉ định đường dẫn khác.

Khám phá các tùy chọn nohup

Mặc dù lệnh nohup không có nhiều tùy chọn, nhưng hiểu cách sử dụng nó hiệu quả với các lệnh và kỹ thuật chuyển hướng khác nhau có thể cải thiện hiệu suất. Đầu tiên, hãy xem cách lấy thông tin về lệnh nohup:

nohup –-help 
nohup --version

Hai lệnh này cung cấp thông tin hữu ích bằng cách hiển thị thông báo trợ giúp và phiên bản của nohup.

Chạy một quy trình bằng lệnh nohup

Nếu bạn muốn chạy một process với lệnh nohup, bạn có thể tuân theo cấu trúc tương tự mà tôi giải thích trong phần cuối cùng:

nohup [command]

Nếu bạn muốn chạy một process ở nền, chỉ cần thêm & vào cuối lệnh của bạn.

Chạy nhiều quy trình ở nền bằng lệnh nohup

Giờ đây, nếu bạn muốn chạy nhiều hơn một process ở nền bằng lệnh nohup thì sao?

nohup bash -c '[command A] && [command B]' &

Thay thế [command A][command B] bằng các lệnh mà bạn muốn chạy ở nền. Hãy tưởng tượng bạn muốn trước tiên cập nhật các gói hệ thống của mình rồi dọn dẹp các tệp không cần thiết và bạn muốn làm điều này bằng lệnh nohup:

nohup bash -c 'sudo apt-get update && sudo apt-get autoremove -y' &

Trong ví dụ này, nohup cho phép cả quá trình cập nhật và dọn dẹp tiếp tục chạy ở nền. Vì vậy các tác vụ bảo trì hệ thống của bạn được hoàn thành mà không cần phải giữ terminal mở.

Chuyển hướng đầu ra tùy chỉnh

Output của process này sẽ được chuyển hướng đến nohup.out theo mặc định. Nhưng nếu bạn muốn nhận output ở một đường dẫn khác thì sao? Đây là cách bạn có thể làm:

nohup [command] > [/path/to/new/output.txt]

Hãy nhớ thay thế các giá trị trong [] bằng lệnh và đường dẫn file mong muốn của bạn.

Kết hợp nohup với các lệnh khác

nohup có thể được kết hợp với các lệnh khác và pipe để tạo các chuỗi lệnh mạnh mẽ. Hãy xem một ví dụ:

nohup find / -name "*.log" | xargs grep "ERROR" > error_logs.txt 2>&1 &

Ở đây tìm được dùng để tìm kiếm các log file và grep được dùng để tìm kiếm từ "ERROR". Output kết hợp được chuyển hướng đến error_logs.txt.

Trong phần này, chúng tôi đã đề cập đến các tùy chọn và trường hợp sử dụng phổ biến nhất của lệnh nohup. Bằng cách nắm vững những hướng dẫn này, bạn có thể sử dụng nohup hiệu quả để chạy các process Linux ở nền.

Các lỗi thường gặp và cách khắc phục

Sử dụng lệnh nohup nói chung rất dễ dàng, nhưng bạn có thể gặp phải một số lỗi phổ biến trong quá trình này. Hiểu những lỗi này và biết cách khắc phục chúng có thể giúp bạn tiết kiệm thời gian và tránh được sự bực bội. Vì vậy, hãy xem những lỗi phổ biến này là gì và cách xử lý chúng:

Quyền truy cập bị từ chối

Lỗi này xảy ra khi script hoặc lệnh mà bạn đang cố gắng chạy không có quyền thực thi. Output của lỗi trông như thế này: nohup: failed to run command 'myscript.sh': Permission denied

Để giải quyết vấn đề này, bạn cần đảm bảo rằng script hoặc lệnh có quyền chính xác. Bạn có thể thêm quyền thực thi bằng cách sử dụng chmod lệnh:

chmod +x myscript.sh 
nohup ./myscript.sh &

Lệnh không tìm thấy

Lỗi này xảy ra khi lệnh hoặc script không được tìm thấy tại vị trí được chỉ định hoặc không có sẵn trong PATH của bạn. Kết quả lỗi trông như thế này: nohup: failed to run command 'myscript.sh': No such file or directory

Để giải quyết lỗi này, bạn nên kiểm tra xem lệnh hoặc script có tồn tại và nằm trong thư mục chính xác hay không. Bạn có thể cần cung cấp đường dẫn tuyệt đối đến script:

nohup /path/to/myscript.sh &

Cũng hãy chắc chắn rằng lệnh đã được cài đặt và có sẵn trong PATH của bạn.

Không có đầu ra

Đôi khi bạn có thể nhận thấy rằng không có kết quả nào trong terminal hoặc tệp output. Nếu lệnh tạo ra kết quả nhưng bạn không thấy nó, thì nó có thể được chuyển hướng đến một đường dẫn khác ngoài tệp mặc định hoặc có vấn đề với quyền truy cập tệp. Để giải quyết vấn đề này, bạn cần chỉ định tệp output một cách rõ ràng để đảm bảo nó được chuyển hướng chính xác:

nohup myscript.sh > output.log 2>&1 &

Ví dụ, lệnh này chuyển hướng cả đầu ra tiêu chuẩn và lỗi tiêu chuẩn đến một tệp có tên output.log.

Tập lệnh không chạy ở nền

Đôi khi script hoặc lệnh của bạn có vẻ như đang chạy, nhưng không phải ở chế độ nền. Lý do thường rất đơn giản. Bạn có thể đã quên thêm & ký hiệu ở cuối lệnh để chạy nó ở chế độ nền. Giải pháp cũng rất đơn giản, chỉ cần chắc chắn rằng bạn đã thêm nó và sẽ ổn thôi.

Quy trình treo hoặc không phản hồi

Một process khởi chạy với nohup có thể bị treo hoặc không phản hồi. Điều này có thể xảy ra nếu process đang chờ đợi đầu vào hoặc nếu có vấn đề với tài nguyên mà nó đang cố gắng truy cập. Có hai cách để giải quyết vấn đề này:

  • Kiểm tra Đầu Vào Cần Thiết: Hãy chắc chắn rằng lệnh không yêu cầu bất kỳ đầu vào tương tác nào.
  • Vấn đề về tài nguyên: Xác minh rằng lệnh có quyền truy cập vào các tài nguyên cần thiết (ví dụ: tệp, mạng).

Ghi đè nohup.out

Nếu bạn đang chạy nhiều process ở chế độ nền bằng cách sử dụng lệnh nohup, bạn có thể vô tình ghi đè nohup.out tệp. Để tránh vấn đề này, bạn có thể chọn một đường dẫn cụ thể cho mỗi process. Bằng cách này, mỗi process có tệp output duy nhất của nó và đường dẫn mặc định sẽ không bị ghi đè.

Bằng cách tìm hiểu về các lỗi nohup thường gặp và cách giải quyết chúng, bạn có thể sử dụng lệnh nohup mà không gặp rắc rối.

Kết luận

Lệnh nohup là một công cụ tuyệt vời cho bất kỳ người dùng Linux nào cần chạy các process ở chế độ nền vì nó đảm bảo các process của bạn tiếp tục chạy ngay cả sau khi đăng xuất. Trong hướng dẫn này, chúng tôi đã đề cập đến cú pháp cơ bản, khám phá các tùy chọn khác nhau và thảo luận về các lỗi thường gặp cùng với mẹo khắc phục sự cố. Nắm vững lệnh nohup cho phép bạn quản lý các tác vụ chạy lâu dài một cách hiệu quả, điều này nâng cao năng suất và kỹ năng quản lý hệ thống của bạn.

Nếu bạn là một nhà phát triển Linux muốn tối đa hóa trải nghiệm Linux của mình, hãy xem xét nâng cấp lên một Linux VPS. Dịch vụ VPS dựa trên nền tảng đám mây của chúng tôi cung cấp hỗ trợ 24/7 và bảo đảm thời gian hoạt động 99,95% có nghĩa là các ứng dụng của bạn chạy mượt mà mọi lúc và bạn có thể nhận được trợ giúp bất cứ lúc nào trong ngày. Với cơ sở hạ tầng mạnh mẽ và tài nguyên đáng tin cậy, VPS của chúng tôi được thiết kế để đáp ứng nhu cầu của các lập trình viên Linux. Hơn nữa, bạn có thể cài đặt sẵn bản phân phối Linux mà bạn ưa thích, giúp thiết lập nhanh chóng và dễ dàng. Đưa các dự án Linux của bạn lên tầm cao mới với VPS cung cấp sức mạnh và tính linh hoạt mà bạn cần.

Câu hỏi thường gặp

Sự khác biệt giữa nohup&?

nohup ngăn chặn một process bị kết thúc khi người dùng đăng xuất, trong khi & chạy một process ở chế độ nền. Sử dụng nohup đảm bảo process tiếp tục chạy sau khi đăng xuất, và kết hợp nó với & cho phép nó chạy ở chế độ nền.

Tại sao sử dụng nohup?

nohup được sử dụng để đảm bảo rằng một lệnh hoặc script tiếp tục chạy ngay cả sau khi người dùng đăng xuất hoặc terminal được đóng. Nó là điều cần thiết cho các process chạy lâu dài cần phải vẫn hoạt động mà không cần sự can thiệp của người dùng.

Tệp nohup out là gì?

Cái nohup.out tệp là tệp output mặc định nơi nohup chuyển hướng đầu ra tiêu chuẩn và lỗi tiêu chuẩn của một lệnh. Nếu không chỉ định tệp output khác, kết quả của lệnh sẽ được lưu vào nohup.out trong thư mục hiện tại.

Chia sẻ

Bài viết mới từ blog

Tiếp tục đọc.

Những Ứng Dụng Self-Hosted Tốt Nhất Bạn Có Thể Chạy với Cosmos Cloud hình ảnh bìa với các bảng điều khiển ứng dụng xung quanh một bảng điều khiển Cosmos.
Máy chủ & Hệ điều hành

Những Ứng Dụng Self-Hosted Tốt Nhất Bạn Có Thể Chạy với Cosmos Cloud: Tệp, Media, Mật khẩu, Tự động hóa & Hơn nữa!

Sau khi bạn đã thiết lập Cosmos Cloud và muốn xem những ứng dụng nào phù hợp với nó, hoặc có thể bạn chưa quyết định sử dụng Cosmos và chỉ muốn biết nó phù hợp với quy trình làm việc của bạn như thế nào

Nick BạcNick Bạc Đọc trong 16 phút
Portainer so với Cosmos Cloud để Quản lý Ứng Dụng Docker bìa có sơ đồ thiết lập hybrid và khối điều hành so với khối truy cập.
Máy chủ & Hệ điều hành

Portainer so với Cosmos Cloud: Lựa Chọn Tốt Nhất cho Quản Lý Ứng Dụng Docker

Nếu bạn đã biết về Docker và chỉ muốn cách rõ ràng hơn để chạy một stack ứng dụng phát triển, đây là câu trả lời ngắn gọn cho Portainer so với Cosmos Cloud. Portainer là lựa chọn mạnh hơn cho

Nick BạcNick Bạc 14 phút đọc
Cosmos Cloud so với CasaOS so với Umbrel biểu đồ tính năng hiển thị ba đường dẫn self-hosted trong một thế giới mạng đám mây trừu tượng.
Máy chủ & Hệ điều hành

Cosmos Cloud so với CasaOS so với Umbrel: Nền Tảng Self-Hosted Nào Phù Hợp với Thiết Lập của Bạn?

Câu trả lời ngắn gọn là CasaOS vẫn là nơi dễ nhất để bắt đầu, Umbrel có cảm giác được tuyển chọn sạch nhất, và Cosmos Cloud có ý nghĩa hơn khi bạn muốn kiểm soát chặt chẽ hơn đối với

Nick BạcNick Bạc 11 phút đọc

Sẵn sàng triển khai? Từ $2.48/tháng.

Cloud độc lập, hoạt động từ 2008. AMD EPYC, NVMe, 40 Gbps. Hoàn tiền trong 14 ngày.