lsb - log_daemon_msg menggemakan pesan di konsol shell!


0
#!/bin/sh
. /lib/lsb/init-functions
log_daemon_msg "this is a daemon s message"

Pada konsol shell, ia mencetak,

this is a daemon s message

Proses daemon tidak memiliki stdout sama sekali. Jadi mengapa daemon startupskrip menulis stdout? Apakah mereka tidak seharusnya menggunakan syslogfile? Bagaimana saya bisa mengarahkan log init ke file log sistem sehingga saya bisa men-debug masalah waktu boot? Saya menggunakan Ubuntu 14.04.


Dugaan pertama saya adalah syslog menangani pesan-pesan ini sama pentingnya dengan dicetak ke konsol.
Lambert

tidak, saya tidak melihat /etc/init.d/sshhal-hal log_daemon_msg di dalam saya /var/log/syslog. dan log_daemon_msgkode sumber juga tidak memiliki logika untuk menulis pesan ke file.
Madhavan

Dari apa yang saya baca, fungsi lsb init digunakan saat menghentikan dan memulai layanan dan mencetak pesan status seperti [Oke], atau [Gagal]. Lihat refspecs.linuxbase.org/LSB_3.0.0/LSB-generic/LSB-generic/… untuk rincian
Lambert

Jawaban:


1

Proses daemon tidak memiliki stdout sama sekali.

Tidak benar. Jika demon seseorang dikelola oleh salah satu keluarga daemontools dari toolsets ( https://unix.stackexchange.com/a/179798/5132 ), maka demon akan mewarisi deskriptor file output standar terbuka, untuk pipa yang menghubungkan ke layanan logging. Jika seseorang menggunakan systemd, maka (dalam konfigurasi default), demon akan mewarisi deskriptor file output terbuka standar, untuk soket yang menghubungkannya ke layanan jurnal systemd.

Dalam kasus apa pun, Anda menggabungkan init.dskrip, yang mengelola demon, dengan demon itu sendiri. Dengan System V rcdan dengan systemd, init.dskrip hanya menyebabkan awal dan berhenti dari proses demon yang tepat. (Dalam kasus Sistem V rcmelakukan hal ini dengan pembantu seperti start-stop-daemon. Dalam kasus systemd, digunakan systemctluntuk mengirim perintah melalui D-Bus RPC untuk memproses # 1.) Ini bukan proses demon itu sendiri.

Output standar dari proses demon tidak harus ada hubungannya sama sekali dengan output standar dari init.dskrip. Dan itu adalah output standar dari yang terakhir yang Anda tangani log_daemon_msg. Fungsi shell ini, dan kerabatnya, mencetak pesan-pesan ramah dari skrip manajemen demon , menunjukkan apa yang dilakukan skrip manajemen ketika mencoba untuk memberlakukan perintah-perintah kontrol demon. Mereka tidak digunakan dalam demon itu sendiri .

Ironisnya, karena manajemen daemon dilakukan secara berbeda dengan systemd, semua log_daemon_msgperintah menjadi tidak relevan, karena setiap skrip manajemen yang sumber /lib/lsb/init-functionsakhirnya mengalihkan semua perintah kontrol ke systemctl.

Bagaimana saya bisa mengarahkan log init ke file log sistem sehingga saya bisa men-debug masalah waktu boot?

Anda punya tugas. Anda telah memutuskan bahwa subtugas dari tugas itu dapat diatasi log_daemon_msg, dan di sini Anda bertanya bagaimana log_daemon_msgmelakukan sesuatu yang tidak dirancang untuk dilakukan. Berkonsentrasilah pada pertanyaan Anda yang sesungguhnya .

Ubuntu 14,04 menggunakan pemula. Itu memiliki /etc/init/rc.confpekerjaan pemula yang menyediakan kompatibilitas mundur dengan Sistem V rcdengan benar-benar menjalankan Sistem V rcsetiap kali peristiwa runlevel terjadi. Pekerjaan ini tercantum dalam Cookbook kaya baru dan seperti yang Anda lihat menggunakan yang console outputstanza .

Seperti yang dapat Anda lihat dari Cookbook , dengan pemula - dan juga - demon (secara default) mewarisi deskriptor file output standar terbuka yang terhubung ke mekanisme logging per-pekerjaan pemula. Sekali lagi, anggapan bahwa demon "tidak memiliki output standar" adalah salah. The /etc/init/rc.confpekerjaan menggunakan (non-default) pilihan untuk menghubungkan output standar untuk konsol. Ini tentu saja juga mengarahkan output dari berbagai skrip manajemen demon yang akan dihasilkan oleh System V rc, pada gilirannya.

Jadi, jika Anda ingin mencatat output /etc/init/rc.confpekerjaan Anda , dan semua skrip manajemen System V yang dihasilkannya, di tempat lain, modifikasi spesifikasi pekerjaan itu.

Jika Anda ingin men-debug masalah waktu boot, gunakan mekanisme yang dijelaskan di Cookbook pemula (dan juga di AskUbuntu Stack Exchange dalam beberapa jawaban) untuk debugging waktu boot.

Bacaan lebih lanjut

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.