#!/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 startup
skrip menulis stdout
? Apakah mereka tidak seharusnya menggunakan syslog
file? Bagaimana saya bisa mengarahkan log init ke file log sistem sehingga saya bisa men-debug masalah waktu boot? Saya menggunakan Ubuntu 14.04.
/etc/init.d/ssh
hal-hal log_daemon_msg di dalam saya/var/log/syslog
. danlog_daemon_msg
kode sumber juga tidak memiliki logika untuk menulis pesan ke file.Jawaban:
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.d
skrip, yang mengelola demon, dengan demon itu sendiri. Dengan System Vrc
dan dengan systemd,init.d
skrip hanya menyebabkan awal dan berhenti dari proses demon yang tepat. (Dalam kasus Sistem Vrc
melakukan hal ini dengan pembantu sepertistart-stop-daemon
. Dalam kasus systemd, digunakansystemctl
untuk 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.d
skrip. Dan itu adalah output standar dari yang terakhir yang Anda tanganilog_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_msg
perintah menjadi tidak relevan, karena setiap skrip manajemen yang sumber/lib/lsb/init-functions
akhirnya mengalihkan semua perintah kontrol kesystemctl
.Anda punya tugas. Anda telah memutuskan bahwa subtugas dari tugas itu dapat diatasi
log_daemon_msg
, dan di sini Anda bertanya bagaimanalog_daemon_msg
melakukan sesuatu yang tidak dirancang untuk dilakukan. Berkonsentrasilah pada pertanyaan Anda yang sesungguhnya .Ubuntu 14,04 menggunakan pemula. Itu memiliki
/etc/init/rc.conf
pekerjaan pemula yang menyediakan kompatibilitas mundur dengan Sistem Vrc
dengan benar-benar menjalankan Sistem Vrc
setiap kali peristiwa runlevel terjadi. Pekerjaan ini tercantum dalam Cookbook kaya baru dan seperti yang Anda lihat menggunakan yangconsole output
stanza .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.conf
pekerjaan 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 Vrc
, pada gilirannya.Jadi, jika Anda ingin mencatat output
/etc/init/rc.conf
pekerjaan 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
sumber