Her zaman açık ve yazılan bir dosyayı döndürme


10

Sürekli bir günlük dosyasına, örneğin günlük bilgilerini yazar bir linux uygulaması var. /var/log/application.log. Uygulama dosyayı otomatik olarak döndürmediğinden, bu günlük dosyası birkaç hafta içinde gigabayt boyutuna ulaşabilir, bu nedenle bu dosyayı düzgün bir şekilde döndürmek istiyorum

Burada benim asıl endişe her zaman uygulama tarafından açılan bir dosyayı döndürmek için, muhtemelen gerekir:

  1. Dosyayı döndürülmüş forma taşıma /var/log/application.log -> /var/log/application.log.2013-01-28

  2. Boş bir dosya oluşturun /var/log/application.log. Obs: Bu noktada başvuru süreci hala/var/log/application.log.2013-01-28

  3. Uygulama işleminin dosya tanımlayıcısını tekrar /var/log/application.log

Yani, haklı mıyım? Öyleyse, bunu nasıl yapabilirim? (esas olarak dosya tanımlayıcı kısmını değiştirme)

Değilsem, doğru yol nedir ve nasıl yapılır?


Dosyayı temizlemeniz mi yoksa yalnızca döndürmeniz mi gerekiyor?
ewwhite

Ne uygulaması? Uygulama, bunu doğru bir şekilde yapmak için destek sağlamalıdır. (Aksi takdirde, çok çirkin bir şey yapabilirsiniz - sürece ekleyin, yeni dosyayı açın, eski dosyayı dup2yeni tanımlayıcıyı açın , sonra yeni tanımlayıcıyı kapatın.)
David Schwartz

İlginç bir yaklaşım Schwartz. Bunu eylemde görmek merak ediyorum ve bir süre oynayacak. Her neyse, uygulama evde ve daha genel bir çözüm arıyorum im. Kormoc´s answer btw seviyorum
Bruno Polaco

@ewwhite Döndürmem gerekiyor, günlük verilerini kaybetmeyi göze alamıyorum
Bruno Polaco

Yanıtlar:


11

Kullanılacak bir logrotateyapılandırma yazıncopytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

İlginç, dosyayı kopyaladıktan sonra kırpmak, veri kaybı marjında ​​bile oldukça akıllı görünüyor. Logrotate bu seçeneği fark etmedi. Anlayışınız için teşekkürler :)
Bruno Polaco

1

Bu tür uygulamaların çoğu gibi bir sinyale yanıt verir ve sinyal SIGHUPalındığında günlük dosyalarını kapatır ve yeniden açar . Gönderilecek doğru sinyal için uygulamanızın belgelerine bakın.


Ve eğer başlamazsa, uygulamayı yedek olarak yeniden başlatabilirsiniz. Sistem günlüğü genellikle ve diğer birkaç programın yaptığı şey budur.
LSD
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.