Benim nohup.out
dosya hızla büyüyor.
Arka planda bir uygulama çalıştırıyorum, nohup.out
dosya yazıyor ,
şimdi nohup.out
benim uygulama öldürmeden dosyayı döndürmek gerekiyor . Bu yapılabilir mi?
Benim nohup.out
dosya hızla büyüyor.
Arka planda bir uygulama çalıştırıyorum, nohup.out
dosya yazıyor ,
şimdi nohup.out
benim uygulama öldürmeden dosyayı döndürmek gerekiyor . Bu yapılabilir mi?
Yanıtlar:
Flog ile birlikte bir göz atmalısınız logrotate
. Eğer uygulama çıkışınızı SIGHUP
buna bağlarsanız, çalışan uygulamanızı öldürmek zorunda kalmadan flog işlemini yapabilirsiniz.
flog (dosya kaydedici), STDIN'den girişi okuyan ve bir dosyaya yazan bir programdır.
SIGHUP alınırsa, dosya, günlük dönüşüne izin verecek şekilde yeniden açılacaktır [bkz. RH üzerinde logrotate (8).]
Günlük dosyası yalnızca flog döndürmenin gerçekleştiğini algılarsa (yani eski dosya gitti veya inode değişti) yeniden açılır. flog son derece küçüktür (500 bayttan az bellek alanı.)
To save output to FILE, use 'nohup COMMAND > FILE'
Döndüremezsiniz. >nohup.out
Dosyadaki tüm içeriği silecek komutla kısaltabilirsiniz .
Çıktıyı kaydetmeniz gerekiyorsa, önce dosyayı kopyalayıp kısaltabilirsiniz. Ancak, dosyayı kopyaladıktan sonra ancak kesmeden önce çıktının yazılabileceği bir yarış için küçük bir pencere var. Bu pencere sırasında yazılan çıktılar sonsuza kadar kaybolacaktır.
copytruncate
in ile eşdeğerdir logrotate
. Ancak nohup.out
nadiren bir cron işini dönecek şekilde yapılandıracağınız türden bir dosyadır.
Yapamazsın.
Dosyanın bağlantısını kaldırabilirsiniz (rm) ancak verilerin disk üzerinde hala bir ayak izi vardır ve açık bir dosya tanıtıcısı olduğu sürece yazmaya devam edecektir.
Dosyayı yeniden adlandırabilirsiniz - ancak yine de bu dosyanın yazılmasını engellemez (ancak arka plan işlerine düzenli olarak başlıyorsanız, yeni olanlar aynı dosyaya yazacaktır).
Gerçekten, işin çıktısını açıkça bunu ele almak için tasarlanmış bir şeye yönlendirmelisiniz (örn. Apache rotatelogs ).
Buna çok geç kaldığımdan emin değilim. Ama şimdi bu foruma rastlayan diğerleri için, flog veya başka bir şey denemek zorunda kalmadım.
Benim işim şöyle başlıyor:
nohup <my process> &
Bu işimi başlatır ve bu dizindeki bir nohup.out öğesine eklemeye başlar.
Tek yapmam gereken, genellikle dağıtımla birlikte gelen bir logrotate kurmak ve bunun gibi bir şey yapılandırmaktı. /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
Ve işe yaradı !! nohup.out yeni dosya aynı dosyaya eklenirken kesiliyordu. Süreç de ölmedi. Ve bunun gibi yeni bir nohup.out nohup.out-20190528
oluşturuldu.
Bu yardımcı olur umarım.
Logrotate, normal döndürme (ve ayarlanmışsa sıkıştırma) şemasına kopyalandıktan sonra belirtilen dosyanızı kesecek (boşaltacaktır) bir copytruncate seçeneğine sahiptir.
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 can not 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 log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
Gönderen logrotate manpage .
Bunun gibi bir şey yapabilirsiniz:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
Uygulamanızı öldürmeniz gerekmez.