Chỉnh sửa 2016-06 / 02
Nếu bạn đang cố gắng tìm "Thông báo nhật ký khởi động" nói chung, hãy kiểm tra /var/log/upstart/. Đó là nơi Upstart tiết kiệm stdoutvà stderrtừ các dịch vụ Upstart. Cảm ơn câu trả lời của leopd đã chỉ ra điều này.
Nếu bạn đang tìm kiếm thông điệp tường trình từ chính Upstart, được cấu hình initctl log-priorityvà phát ra bởi initctl emit, hãy đọc tiếp!
Phiên bản ngắn
Các mục nhật ký sẽ thực sự hiển thị trong dmesg. Mặc dù vậy, chúng không hiển thị theo mặc định /var/log.
Nếu bạn cũng muốn chúng /var/log, hãy thêm $KLogPermitNonKernelFacility onvào cấu hình của rsyslogd. Tôi khuyên bạn nên tạo một tệp tùy chỉnh /etc/rsyslog.d/60-custom.confđể tránh chỉnh sửa /etc/rsyslog.conf, vì đó được quản lý bởi dpkg. Bây giờ, các tin nhắn Upstart sẽ hiển thị /var/log/syslog, sau khi bạn thiết lập Upstart's log-prioritytrở lên info.
Phiên bản dài
Điều này khiến tôi mất nhiều ngày để theo dõi, nhưng dường như Upstart (1.5) không đăng nhập vào syslog, nghĩa là nó không gọi hàm glibc syslog(). Thay vào đó, Upstart đăng nhập vào bộ đệm vòng kernel, đó là những gì dmesg đọc. Bây giờ, tôi không nghĩ các quy trình không gian của người dùng có thể ghi vào bộ đệm đó, nhưng rõ ràng họ có thể viết bằng /dev/kmsgvà đó chính xác là những gì Upstart làm. Vì vậy, đó là phần đầu tiên của câu đố.
Phần thứ hai là có một niềm tin phổ biến rằng các thông điệp được ghi vào bộ đệm vòng kernel được tự động sao chép vào syslog bởi kernel (ít nhất đó là điều tôi luôn nghĩ). Hóa ra điều này thực sự được thực hiện bởi một daemon không gian người dùng, theo truyền thống klogd, hoạt động song song với syslogd. Rõ ràng rsyslogd thay thế syslogd nhưng rõ ràng nó cũng thay thế klogd (loại: xem ghi chú ở cuối).
Phần thứ ba là các tin nhắn được ghi vào bộ đệm vòng kernel từ không gian người dùng thực sự trông khác với các tin nhắn được viết từ không gian kernel: chúng có một phương tiện khác. dmesg có một vài tùy chọn mà tương tác với điều này: -xsẽ hiển thị các thiết bị (và ưu tiên), trong khi -uvà -knói dmesg để chỉ hiển thị các thông điệp cơ sở người dùng và thông điệp cơ sở hạt nhân, tương ứng.
Bây giờ đây là móc sắt: theo mặc định, rsyslogd bỏ qua các tin nhắn với một cơ sở không phải kernel khi nó đọc các tin nhắn từ bộ đệm vòng kernel. Tùy chọn cấu hình có liên quan $KLogPermitNonKernelFacilitylà tắt theo mặc định và cần được bật nếu bạn muốn rsyslogd xử lý các tin nhắn này. Lưu ý rằng phần còn lại của cấu hình rsyslogd sẽ coi tất cả các thông báo từ bộ đệm vòng nhân là có kerncơ sở, bất kể cơ sở mà chúng có trong bộ đệm vòng nhân.
Thêm thông tin
nhật ký hệ thống
Mã có thể ghi vào syslog bằng cách gọi hàm glibc syslog(), được mô tả trong man 3 syslog. Rõ ràng các chức năng này ghi vào /dev/log. Mã có thể đọc từ syslog bằng cách đọc /dev/log, và đây là những gì syslogdvà thay thế của nó làm. rsyslogdđọc /dev/logbằng imuxsockmô-đun đầu vào của nó .
Bộ đệm hạt nhân
Không gian hạt nhân ghi vào bộ đệm này bằng cách gọi hàm kernel printk(), vì vậy đôi khi nó được gọi là bộ đệm printk. Không gian người dùng có thể viết cho nó bằng cách viết vào /dev/kmsg. Không gian người dùng có thể đọc từ bộ đệm này bằng một số phương thức: nó có thể đọc từ /proc/kmsg(những gì dmesg làm theo mặc định) hoặc nó có thể đọc từ /dev/kmsghoặc nó có thể gọi cuộc gọi hệ thống syslog(), được mô tả trong man 2 syslogvà hoàn toàn khác với chức năng glibc syslog()được mô tả trong man 3 syslog. glibc thực sự cung cấp một trình bao bọc cho lệnh gọi hệ thống syslog(), được gọi klogctl(), để giúp giảm bớt sự nhầm lẫn này.
Theo truyền thống, klogdđọc từ một trong các giao diện này, sau đó gọi hàm glibc syslog()để sao chép chúng vào syslog. rsyslogd đọc một trong những giao diện này thông qua imklogmô-đun đầu vào của nó nhưng AFAIK không bận tâm đến việc gọi glibc syslog(), đó là lý do tại sao nó không giống như klogd; nó chỉ xử lý đầu ra imkloggiống như nó xử lý đầu ra từ bất kỳ mô-đun đầu vào nào khác. Có một cảnh báo bổ sung rằng tất cả imklogđầu ra có kerncơ sở bất kể các thông điệp cơ sở có trong bộ đệm vòng kernel.
Tài liệu tham khảo
dmesgnhưng nó không có ý nghĩa gì nếu không có bối cảnh được đưa ra ở đây.