Làm cách nào để tìm thông báo lỗi từ các tập lệnh init.d / rc.d của Linux?


28

Trong Linux, tôi đã viết một số tập lệnh sẽ được thực thi trong khi khởi động và chơi xung quanh với nhiều cách cài đặt chúng. Đối với các tập lệnh lớn hơn, tôi sẽ đưa vào /etc/init.dvà liên kết các đường băng thích hợp /etc/rc.d/rc?.d. Đối với các tập lệnh nhỏ hơn, tôi sẽ nối vào /etc/rc.d/rc.local. Quá trình này dường như đang chạy trơn tru.

Bây giờ tôi đã điều chỉnh một trong các tập lệnh của mình và nó không thành công. Tôi đang có một thời gian để chẩn đoán nó bởi vì tôi dường như không thể nắm bắt được đầu ra lỗi. Tôi đã kiểm tra /var/log/messagesvà chọc quanh phần còn lại /var/lognhưng không thể tìm thấy bất cứ thứ gì sử dụng.

Có ai biết không:

  1. những thông báo lỗi này tự động bị bắt ở đâu đó?
  2. nếu không, làm cách nào tôi có thể chụp stdout / stderr từ các tập lệnh init.d của tôi?

Cảm ơn trước.



Nếu bạn đi đến một bản phân phối hiện đại hơn với systemd, nó sẽ xử lý việc đó cho bạn và cho phép ghi nhật ký thông điệp của từng dịch vụ.
eckes

Câu trả lời:


17
  1. Không - họ chuyển đến STDOUT (nếu bạn sử dụng echo) hoặc STDERR (nếu bạn sử dụng echo >&2).

  2. Các tập lệnh của bạn phải tự ghi vào nhật ký và / hoặc nhật ký hệ thống (bản phân phối của bạn có thể chứa một số hàm init.d có thể giúp ở đó - thêm phân phối của bạn vào câu hỏi của bạn).

Nếu bạn đi cho các bản ghi tìm kiếm teelệnh. Nếu bạn đi cho syslog nhìn vào logger. Bạn có thể kết hợp chúng theo bất kỳ cách nào bạn muốn.



6

Bạn có thể tạo một chức năng để lặp lại thông báo cho cả màn hình và syslog, đại loại như thế này:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

Bạn cũng có thể đặt nó vào một tệp riêng biệt và đưa nó vào tập lệnh của bạn với

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho

Cảm ơn, điều này gần với những gì tôi đang tìm kiếm. Tôi biết cách chuyển hướng I / O nhưng tôi không biết cách gọi vào logger.
McKAMEY

[ -r ... ]một thử nghiệm để kiểm tra nếu nó tồn tại?
McKAMEY

Có, kiểm tra xem các tập tin có thể đọc được.
ott--

5

Tin nhắn từ init script thường không được ghi lại ở bất cứ đâu. Vì vậy, bạn cần phải thực hiện một cách để tự làm điều đó. Một ý tưởng tốt là sử dụng loggerđể gửi tất cả đầu ra tới syslog. Ví dụ này sẽ gửi stdout và stderr tới syslog:

exec 1> >(logger -s -t $(basename $0)) 2>&1

Tôi đã tìm thấy nó trong bài viết tuyệt vời này: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .

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.