İşlem kaydında günlük dosyalarını yeniden açmamak


10

Ubuntu sunucularımızdaki hizmetlerimizi yönetmek için upstart kullanıyoruz. /Var/log/upstart/SERVICE_NAME.log oturumu kapatılmış günlükler oluştururlar

Daha sonra günlük dosyaları, 12.04 LTS ile gelen logrotation betiği kullanılarak döndürülür:

/var/log/upstart/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}

Sorun, logrotate dosyaları hareket ettirirken, dosyaları kapatmak ve yeniden açmak için uptart sinyalini vermiyor ve uptart sürecini silme PID'sine yazıyor.

init          1       root    8w      REG              202,1        64       2431 /var/log/upstart/dbus.log.1 (deleted)
init          1       root   13w      REG              202,1        95       2507 /var/log/upstart/acpid.log.1 (deleted)
init          1       root   14w      REG              202,1       127      17377 /var/log/upstart/whoopsie.log.1 (deleted)
init          1       root   36w      REG              202,1       122       6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init          1       root   37w      REG              202,1        30       6762 

Açıkçası, kendi hizmetlerimden çıktıyı diğer günlük dosyalarına yönlendirebilirim, ancak sorun yine de sistem süreçleri için orada olurdu. Ayrıca ihtiyacım olandan daha fazla altyapı inşa etmek istemem.


Ben de bununla daha yeni karşılaştım. Daha önce fark etmediğimiz çok garip, bu da son zamanlarda olabileceğini düşündürüyor.
pwaller

1
herhangi bir güncelleme var mı_ Aynı sorunu 14.04'te görmek. Onun nocreatedirektif nedeniyle, neden bu yönerge kullanmak için emin değilim, özellikle potansiyel bir sürü çıktı yazabilirsiniz hizmetler için
rynop

Ayrıca bunu yaşıyorum.
Ztyx

Yanıtlar:


2

3 seçeneğiniz olduğuna inanıyorum.

  1. Mevcut yapılandırmayı "copytruncate" ekleyerek değiştirirsiniz

    /var/log/upstart/*.log { copytruncate daily missingok rotate 7 compress notifempty nocreate }

  2. Acı çekmeyen diğer günlük dosyaları nedeniyle var olan logrotate yapılandırmasını değiştiremezseniz veya değiştiremezseniz ve var olan yapılandırma bunlar için çalışıyorsa, "SERVICE_NAME.log" dosyalarınızı / altında yeni bir klasöre taşıyın var / log isterseniz, "copytruncate" ile yeni bir yapılandırma oluşturun ve cron.daily dosyasına ekleyin.

  3. a) Host os logrotate yapılandırmasını değiştirmenize veya host OS'nin cron.daily dosyasına eklemenize izin verilmiyorsa, üçüncü seçeneğiniz, dosyaya yazmadan önce dosyanın var olup olmadığını kontrol etmek için komut dosyalarını veya programları değiştirmektir. b) Başka bir yol, günlük dosyalarınızı başka bir yere taşımak ve komut dosyasında veya programınızda taşımak, o programın günlük dosyasına özel logrotate komutunu yürütmek için yukarıdaki 2 numaralı noktadır.

Yukarıdaki 3b noktası daha zor ama daha zarif ve çoğu zaman kullandığım şey, çünkü program kendi kendine yeten ve kendi kendini yöneten ve bebek bakıcısı için işletim sisteminin işlerine ihtiyaç duymadığı anlamına geliyor.

Logrotate'i manuel olarak nasıl çalıştıracağınızı ve programınıza veya komut dosyanıza nasıl ekleyeceğinizi öğrenmek için şunu yazın:

man logrotate

veya

logrotate --help

Programlarınız için Python kullanıyorsanız, bu programın günlük dosyalarını kendi kendini yönetmek için nasıl kullandığını kontrol edebilirsiniz. http://bazaar.launchpad.net/~ferncasado/keep.awake/trunk/files/head:/v4/


0

Anlaşılan, bu bilinen bir sorundur ve bunu yazarken bilet açık kalır.

Yapılması gereken doğru şey, muhtemelen, /etc/logrotate.d/upstarttamamen kaldırmak ve bireysel hizmetlerin dosyalarını ayrı ayrı döndürmektir. Dizin ( /var/log/upstart/) yalnızca çeşitli hizmetlerin stdout / stderr'sini içerdiğinden ve bir arka plan programı olarak çalışması amaçlanan hiçbir hizmetin bu iki kanala çıkış yapmaması gerekir. Belki de başlangıçta.

İdare ediyorum sistemlerde, üç hizmetlerin sonradan görme tarafından işletilmektedir: php5.6-fpm, php7.1-fpm, ve acpid. Üç günlükten hiçbiri etkin değildir, ancak bazen ana günlük dosyası ( /var/log/php5.6-fpm.log) döndürüldüğünden fpm yeniden başlatılır - ve bu gürültüye neden olur, çünkü başlangıçta bir miktar cansızlık verir.

Bu dosyaları yine de döndürmekte ısrar ederseniz, adlarının hizmetlerin adlarıyla eşleştiğine ve aşağıdaki postrotatekomut dosyasını kullandığına güvenebilirsiniz :

    postrotate
            service=${1##*/}
            service=${service%.log*}
            service $service restart > /dev/null
    endscript

İşe yukarıda, emin olun için değil kullanmak sharedscriptsorada fiilini - benim scriptlet gerçeğine dayanır, dosyaya fiili yolu ilk argüman olarak kendisine geçirilen edilecektir ( $1).

(İçine yönlendirme /dev/nullyararlıdır, çünkü service-command gürültülü -. Ve ben yönlendirerek değilim, böyle gürültü cron Bildirimi tarafından size e-posta ile istemiyoruz stderr, orada sadece stdout- bir sorun varsa, size Bu konuda e-postalarınızı almaya devam edeceğim.)

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.