Lệnh nohup trong Linux: Bỏ qua đầu vào và chuyển hướng stderr đến stdout để biết chi tiết
2024-10-16 11:07:00
tin tức
tiyusaishi
I. Giới thiệu
Trong hệ thống Linux, chúng ta thường cần chạy một số tác vụ dài hạn trong nền, chẳng hạn như thực thi tập lệnh, xử lý chương trình nền, v.v. Và khi chạy trong nền, chúng ta có thể gặp nhiều vấn đề khác nhau, chẳng hạn như đầu ra của các lệnh và cách giữ cho chúng chạy sau khi ngắt kết nối thiết bị đầu cuối. Linux cung cấp lệnh nohup để giải quyết những vấn đề này cho chúng ta. Bài viết này sẽ đi sâu vào cách lệnh nohup trong Linux bỏ qua đầu vào và chuyển hướng stderr sang stdout và cách nó có thể được sử dụng trong thực tế.
2. Tổng quan về lệnh nohup trong Linux
Đầu tiên, hãy giới thiệu ngắn gọn về chức năng cơ bản của lệnh nohup. Nohup là một lệnh được sử dụng để giữ cho quá trình chạy trong nền sau khi người dùng đăng xuất. Chức năng cốt lõi của nó là ngăn chặn việc chấm dứt các quy trình đang chạy sau khi thiết bị đầu cuối bị treo. Khi chúng tôi thực hiện một lệnh trong thiết bị đầu cuối, nếu thiết bị đầu cuối bị đóng hoặc người dùng đăng xuất, thì lệnh sẽ ngừng chạy ngay lập tức. Tuy nhiên, nếu chúng ta sử dụng lệnh nohup để thực hiện lệnh này, thì lệnh sẽ tiếp tục chạy trong nền cho đến khi nó bị chấm dứt rõ ràng hoặc hệ thống khởi động lại.
3. Bỏ qua đầu vào và chuyển hướng stderr sang stdout
Trong thực tế, chúng ta thường cần xử lý đầu ra của chương trình và đầu ra của lỗi. Trong Linux, đầu ra của một chương trình thường được xuất qua stdout (đầu ra tiêu chuẩn) và stderr (đầu ra lỗi tiêu chuẩn). Lệnh nohup cung cấp hai tùy chọn để xử lý hai đầu ra này: một là bỏ qua đầu vào (stdin) và hai là chuyển hướng stderr sang stdout.
Khi chúng ta chạy một chương trình bằng lệnh nohup, chúng ta có thể sử dụng biểu tượng "-" để bỏ qua đầu vào (stdin). Điều này là do nhiều chương trình đọc stdin để chờ đầu vào của người dùng, điều mà chúng tôi không cần khi chạy chương trình ở chế độ nền. Nếu chúng tôi không cung cấp bất kỳ đầu vào nào cho các chương trình này, thì chương trình có thể ở trạng thái chờ và không thể tiếp tục thực thi. Nếu chúng tôi sử dụng "-", điều đó có nghĩa là chúng tôi không muốn bất kỳ luồng đầu vào nào tiếp cận các chương trình này, do đó tránh được vấn đề chặn chương trình trong khi chờ đầu vào. Ví dụ: dấu "-" trong 'nohupcommand->/dev/null2>&1&' bỏ qua đầu vào. "command" là lệnh bạn muốn chạy, "/dev/null" là loại bỏ đầu ra, "2>&1" là chuyển hướng stderr sang stdout và "&" là chạy trong nền. Cần lưu ý rằng "> / dev / null" phải xuất hiện sau "lệnh" nếu không nó sẽ gây ra lỗi cú pháp. Điều này có nghĩa là bất kỳ đầu ra nào mà lệnh tạo ra, cho dù đó là đầu ra bình thường hay đầu ra xấu, sẽ bị loại bỏ. Điều này thường được sử dụng trong các tác vụ chạy trong nền và không quan tâm đến đầu ra. Khi được thiết lập theo cách này, lệnh sẽ tiếp tục chạy trong nền và bỏ qua tất cả thông tin đầu ra ngay cả khi thiết bị đầu cuối bị đóng hoặc người dùng đăng xuất. Điều này rất hữu ích cho các tập lệnh hoặc tác vụ dài hạn. Chúng tôi có thể tránh được vấn đề tác vụ bị chấm dứt do thiết bị đầu cuối bị tắt, đồng thời bỏ qua tất cả thông tin đầu ra không cần thiết. Tóm lại, chức năng của "nohupcommand->/dev/null2>&1&" là thực thi lệnh ở chế độ nền và bỏ qua tất cả thông tin đầu vào và đầu ra, và chương trình xuôi dòng vẫn có thể chạy sau khi phiên kết thúc, đây là một trong những lựa chọn tốt nhất để hoạt động không bị gián đoạn. Lệnh "nohupcommand->/dev/null2>&1&" rất phổ biến trong Linux vì nó có thể giải quyết nhiều vấn đề xử lý tác vụ nền phổ biến, chẳng hạn như thực thi các tập lệnh tốn thời gian, v.v., cho phép các chương trình của chúng tôi tiếp tục chạy mà không cần dựa vào thiết bị đầu cuối cho đến khi chúng bị chấm dứt theo cách thủ công hoặc hệ thống khởi động lại, do đó cải thiện đáng kể tính ổn định và độ tin cậy của hệ thống. "Đó là tất cả để có một cái nhìn chi tiết về cách lệnh nohup trong Linux bỏ qua đầu vào và chuyển hướng stderr sang stdout, và tôi hy vọng nó sẽ giúp bạn hiểu rõ hơn và sử dụng công cụ mạnh mẽ này."