Linux: làm thế nào để chuyển hướng stdout & stderr sang logger?


22

Tôi có một chương trình tôi cần để chạy khi khởi động, nó có đầu ra trên thiết bị xuất chuẩn và thiết bị xuất chuẩn mà tôi muốn chuyển hướng đến nhật ký hệ thống bằng lệnh logger. Những gì tôi có trong kịch bản khởi nghiệp của mình là:

/ home / dirname / application_name -v | logger 2> & 1 &

Điều này đang chuyển hướng thiết bị xuất chuẩn thành syslog tốt nhưng stderr đang đến với giao diện điều khiển, vì vậy tôi cần tinh chỉnh lệnh.


Câu trả lời:


30

Bạn cần kết hợp đầu ra của STDERR và STDOUT trước khi chuyển nó sang logger. Hãy thử điều này thay thế:

/home/dirname/application_name -v 2>&1 | logger &

Thí dụ

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

Bạn cũng có thể sử dụng ký hiệu viết tắt ở đây, nếu được sử dụng thận trọng trong vỏ Bash thực tế (không bị nhầm lẫn với Dash):

$ echo "hi" |& logger &

LƯU Ý: Điều này tương đương với <cmd1> 2>&1 | <cmd2>. Một lần nữa chỉ sử dụng cách trên khi sử dụng vỏ Bash thực tế một cách tương tác, sẽ là một cách tốt để tiếp cận nó.

trích từ ABSG

# | & đã được thêm vào Bash 4 dưới dạng viết tắt cho 2> & 1 |.

Tài liệu tham khảo


2
slm, không có ý xúc phạm, nhưng hình thức sau là lạm dụng bashism tràn lan. Số lượng các vấn đề tốc ký không cần thiết như vậy có thể gây ra hoàn toàn không xứng đáng với những gì mà lợi ích nhỏ có thể có được từ việc sử dụng chúng. Chẳng hạn, ngay cả trên chính máy của bạn, nếu bạn đặt đoạn mã trên vào tập lệnh và dashcố gắng thực thi tập lệnh khi khởi động chỉ để thất bại và làm hỏng quá trình khởi động của bạn ... tốt ... Khi cú pháp như vậy được đề cập, nó nên được đề cập luôn là trong bối cảnh tương tác vỏ chỉ , hoặc, ít nhất, đó là quan điểm của tôi.
mikeerv

@mikeerv - không có hành vi phạm tội nào được thực hiện 8-). Tôi bao gồm những thứ này vì chúng nằm trong hướng dẫn của ABSG. Tôi đã giả định (có thể không chính xác) rằng OP đã sử dụng Bash kể từ khi họ thể hiện 2>&1nhưng cảnh báo của bạn khá khôn ngoan, với ví dụ là xử lý các công ty khởi nghiệp. Tôi sẽ làm cho những lời khuyên sau đó nổi bật hơn với cảnh báo rằng chúng chỉ dành cho các vỏ Bash tương tác.
slm

@mikeerv - Không phải là lời khuyên âm thanh. Tôi thường không sử dụng Dash hoặc thậm chí Ubuntu vì vậy tôi hơi lãng quên những vấn đề này nhưng chúng vẫn rất thật và thật tốt khi chỉ ra chúng vì Ubuntu / Debian / Dash có thể là tình huống phổ biến hơn.
slm

Thành thật, tôi cũng không sử dụng debians, nhưng tôi càng ngày càng nhận ra rằng nhiều người làm như vậy. Tôi sử dụng dash, mặc dù - nó thực sự là nhanh chóng.
mikeerv

1
Chà, điều đó có thể không cần thiết - bạn không thể gõ đủ nhanh để nó tạo ra sự khác biệt trong hệ vỏ tương tác - mà tôi sử dụng zsh. Nhưng, đối với các tập lệnh, dấu gạch ngang nhanh hơn bất kỳ tập lệnh nào khác mà tôi đã thử.
mikeerv
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.