Systemd + rsyslog ana bilgisayarında `/ dev / log`'u nasıl geri yüklerim?


10

RHEL7'de, bir systemd-journaldzamanlar tarafından yapılanların sorumluluklarının çoğunu devralır rsyslogd. İster bu iki cin arasındaki hata ya da çatışma olsun, bazen /dev/logkaybolacaktır. Sonuç olarak, syslog(3)örneğin, çağrıya dayanan programlar düzgün çalışmaz logger. /dev/logSoketi nasıl geri yükleyebilirim ?

Yanıtlar:


13

Google bu konuda çok yardımcı olmadığından kendi sorumu sormak ve cevaplamak.

Normalde ile rsyslogd, imuxsockmodül yaratacak /dev/logo oluşturmadan önce Önceki girişi bağlantıyı kaldırdıktan kendi başına soketi. Ne zaman rsyslogd(çünkü hatalı yapılandırma başarısız olasılıkla yeniden) durdurulur, silen rsyslogd /dev/log .

Bununla birlikte, birlikte verilen rsyslog ile birlikte RHEL7kullanılması beklenir systemdve imuxsockmodül aslında /run/systemd/journal/syslogsoketi açar ve çıkarır . Bu arada, /dev/logaygıt, systemd-journald.sockettetikleyen sistem hizmet dosyası tarafından oluşturulur journald.

Görünüşe göre, $imjournalmodülün kullanılıp kullanılmadığı aşağıdakiler işe yarıyor.

Özetle, /dev/logkaybolursa:

  1. systemd-journalald.socket dosyasını yeniden başlatın:

    systemctl restart systemd-journald.socket
    
  2. sonra rsyslogd'ı yeniden başlatın

    systemctl start rsyslogd
    

GÜNCELLEME: Zaten çalışıyorsa restart rsyslogdsoketi yeniden silebileceğine inanıyorum rsyslogd.


2
Bunun için çok teşekkürler! Günlüğe kaydetmenin neden bir hizmet için çalışmadığını izleyerek birkaç saat kaybettim. Sonunda eksik / dev / log'a kadar takip ettim, bu da beni çözümüne götürdü.
Chad Huneycutt

4

systemctl restart systemd-journald.socket && systemctl restart rsyslogÇözelti Ubuntu 16.04 benim için çalışmadı.

Bunun yerine, /dev/logbir symlink olarak yeniden oluşturmak zorunda kaldım /run/systemd/journal/dev-log:

ln -s /run/systemd/journal/dev-log /dev/log

Evet, manuel olarak bağlamanın da çalışması gerekir. Ama hatırlamak biraz hantal. Soru: Ubuntu'da systemd-journald.sockethizmet olarak var mı? Q2: belki restart rsyslogdsorun oldu? Belki de basit olmalı start rsyslogd?
Mart'ta Otheus

S1: evet, var. S2: restartArtık komut yok, var serviceve /etc/init.d/rsyslog.
11181

By restart rsyslogddüşündüm anlama geldiğini açıkça söyleyebilirim oldu systemctl restart rsyslogd. Ubuntu hala rsyslog için init komut dosyaları kullanıyor mu?
Mart'ta Otheus

@Otheus ve /etc/init.d/rsyslog stopardından /etc/init.d/rsyslog startyardımcı olmadı. Ne yaptım systemctl stop syslog.socket rsyslog.service && systemctl start syslog.socket rsyslog.serviceBenim sistemde hem var /lib/systemd/system/rsyslog.serviceve /etc/init.d/rsyslog. Her neyse, bu soruna daha fazla zaman ayırmamayı tercih ederim.
11181

0

Benim için bu rsyslog kullanılan imuxsock modülünün systemd ile nasıl çalıştığı ile ilgili bir sorun haline geldi.

Gelen imuxsock belgelerine onlar modül systemd için işin gerekiyordu nasıl doğru yürüyelim. Adım 1 sorunları gördüğüm yerdi:

Adım 1: Sistem soketinin adını seçin

  1. Eğer kullanıcı SysSock'u açık olarak ayarlamayı seçmediyse = "kapalı" ise, varsayılan dinleyici soketi (aka, “sistem günlük soketi” veya basitçe “sistem soketi”) adı / dev / log olarak ayarlanır. Aksi takdirde, kullanıcı açıkça SysSock.Use = "off" olarak ayarladıysa, rsyslog / dev / log VEYA SysSock.Name parametresi tarafından tanımlanan herhangi bir soketi dinlemez ve bu bölümün geri kalanı geçerli olmaz.

  2. Kullanıcı sysSock.Name = "/ path / to / custom / socket" belirtmişse (ve açıkça SysSock.Use = "off" olarak ayarlanmamışsa), varsayılan dinleyici soket adının üzerine / path / to / custom / socket yazılır .

  3. Aksi takdirde, rsyslog systemd AND / run / systemd / journal / syslog altında çalışıyorsa (VE kullanıcı açıkça SysSock.Use = "off" olarak ayarlamadıysa), varsayılan dinleyici soket adının üzerine / run / systemd / journal yazılır / syslog.

Sistemin 3. Adıma düşmesi ve varsayılan yolu "/ run / systemd / journal / syslog" olarak değiştirmesi gerekirdi, bunun yerine "/ var / log" olarak kaldı. Bu, imuxsock modülünün / dev / log dosyasında systemd-journalald-dev-log.socket tarafından oluşturulan sembolik bir bağ olması gereken bir soket oluşturmaya çalışacağı (ve bazen başarılı olacağı) anlamına geliyordu. Gerçek soketin yaratılmaması durumunda, sembolik bağlantı yine de kaldırılacaktır.

Bu belge rsyslog github'da bildirilen bu sorunun sonucuydu. Tartışmayı atlamak ve doğrudan değişikliklere atlamak istiyorsanız, sırasıyla PR # 1 ve PR # 2'ye bakın .

Benim çözümüm sadece /etc/rsyslog.conf dosyasındaki systemd yolunu kullanacak şekilde imuxsock modülünü yapılandırmaktı:

module(load="imuxsock"
    SysSock.Name="/run/systemd/journal/syslog")

Bu, sorunumu düzeltmiş gibi görünüyor ve burada elle oluşturduktan sonra sembolik bağlantının neden tekrar kaybolabileceğini açıklayacağı için burada iyi bir çözüm gibi görünüyor.

Sisteminize bakarsanız ve "/ run / systemd / journal / syslog" yoksa "syslog.socket" dosyasına bakın ve soketin oluşturulmasından sorumlu olan şey budur.

systemctl status syslog.socket

Rsyslog.service sürümünüz, syslog.service öğesini, syslog.socket bu hizmeti etkinleştirmeye çalışırken gerekli olan bir diğer ad olarak tanımlamıyor olabilir. Birden çok günlük kaydı hizmetinin syslog.service adlı diğer adı etkinleştirmeye çalışması da mümkündür, bu durumda en son etkinleştirilen kazanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.