nohup: bỏ qua đầu vào và chuyển hướng stderr sang stdout


19

Tôi đang bắt đầu ứng dụng của mình trong nền bằng cách sử dụng nohupnhư được đề cập dưới đây -

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

Nhưng mỗi khi tôi thấy tin nhắn này -

nohup: ignoring input and redirecting stderr to stdout

Sẽ có vấn đề gì nếu tôi thấy tin nhắn này? Nó có nghĩa là gì và làm thế nào tôi có thể tránh nó?


2
bạn đã thử chưa:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Rahul Patil

thay vì sử dụng /tmp/test.outtôi có thể sử dụng exhibitor.out. Xin lỗi vì đã đặt câu hỏi ngớ ngẩn vì tôi khá mới mẻ với những điều này ..
arsenal

có .. bạn có thể sử dụng .. đó chỉ là lỗi std / tập tin đầu ra. nhưng trạng thái sau khi thêm là 2>&1gì?
Rahul Patil

Câu trả lời:


20

Để đảm bảo rằng ứng dụng của bạn được tách ra khỏi thiết bị đầu cuối của nó - để nó không can thiệp vào các lệnh nền trước và sẽ tiếp tục chạy sau khi bạn đăng xuất - nohupđảm bảo rằng cả stdin hay stdout hay stderr đều không phải là thiết bị đầu cuối. Các tài liệu mô tả những hành động cần:

Nếu đầu ra tiêu chuẩn là một thiết bị đầu cuối, tất cả đầu ra được ghi bởi tiện ích có tên vào đầu ra tiêu chuẩn của nó sẽ được thêm vào cuối tệp nohup.out trong thư mục hiện tại. Nếu nohup.out không thể được tạo hoặc mở để nối thêm, đầu ra sẽ được nối vào cuối tệp nohup.out trong thư mục được chỉ định bởi biến môi trường HOME. Nếu không có tập tin nào có thể được tạo hoặc mở để nối thêm, tiện ích sẽ không được gọi.

Nếu lỗi tiêu chuẩn là một thiết bị đầu cuối, tất cả đầu ra được ghi bởi tiện ích được đặt tên thành lỗi tiêu chuẩn của nó sẽ được chuyển hướng đến cùng một bộ mô tả tệp như đầu ra tiêu chuẩn.

Bạn đã chuyển hướng thiết bị xuất chuẩn vào một tệp khi bạn nhập > exhibitor.outdòng lệnh của mình. Nếu bạn đồng ý với thiết bị xuất chuẩn của ứng dụng được chuyển đến cùng một tệp với thiết bị xuất chuẩn của nó, bạn không cần phải làm gì khác. Hoặc bạn có thể chuyển hướng stderr sang một tệp khác bằng cách thêm một đối số như 2> exhibitor.err. (Cảm ơn một người dùng không xác định - thông báo của tôi không hiển thị tên - vì đã đề xuất đưa vào phương án này.)


2
Nó cũng hữu ích để đóng fd đầu vào theo cách thủ công như vậy : </dev/null; Linux sẽ tự động làm điều này, nhưng nếu không được thực hiện thủ công, bạn vẫn sẽ nhận được một dòng trong đầu ra của nohup có nội dung:nohup: ignoring input
wulfgarpro

17

Bạn có thể thoát khỏi thông báo nếu bạn chuyển hướng lỗi std sang đầu ra std:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &

4

Trong tình huống của tôi, tôi chuyển hướng stdout và stderr, nhưng nó cũng hiển thị như sau trong tệp nhật ký:

nohup: ignoring input

Để xóa cảnh báo đó, bạn cũng phải chuyển hướng stdin như sau:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

Tôi không biết câu trả lời này chắc chắn là muộn đối với bạn, nhưng có lẽ nó sẽ giúp được người khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.