Bunun yerine, bir Yazılımın çalıştığı yerde bazı günlük dosyalarına sahip olabileceğinizi başarmak mv
için cp
komutu kullandım. Belki farklı Kullanıcı ana dizininde veya uygulama dizininde ve tüm günlükleri sabit olarak tek bir yerde bulundurun. mv
Komutu kullanırsanız sabit bağlantıyı kaybedersiniz. Eğer kullanırsanız cp
komutu yerine bu sert linki tutacak.
kodum gibi bir şey:
TMP_FILE="$(mktemp "${TMPFILENAME}.XXX")"
for FILE in "${LOGFILE_DIR}"/* ; do
tail -n $MAXLINES "${FILE}" > "${TMP_FILE}"
if [ $(ls -g "${TMP_FILE}" | awk '{print $4}') -lt $(ls -g "${FILE}" | awk '{print $4}') ] ; then
cp "${TMP_FILE}" "${FILE}"
fi
done
Bu yüzden dosyalar aynı Dosya Sistemindeyse, kullanıcılara bazı farklı haklar verebilirsiniz ve ${LOGFILE_DIR}
siz de benim yaptığım gibi uzunluğu değiştirebilirsiniz.
mv
Komut buysa , dosyalar arasındaki bağlantıyı kaybedersiniz ve böylece ikinci dosyanız birincisine daha fazla bağlı değildir - belki başka bir yere yerleştirilmiş olabilir.
Diğer yerde, birinin dosyayı silmesine izin vermezseniz, günlükleriniz bir arada kalır ve kendi komut dosyanızla iyi kontrol edilir.
logrotate
belki daha güzel. Ama bu çözümden memnunum.
Rahatsız etmeyin "" ama benim durumumda boşluklar ve diğer özel harfler içeren bazı dosyalar var ve "" yapmazsam ya da {} tüm işler iyi çalışmaz.
Örneğin, eski dosyaların otomatik olarak sıkıştırılmış olduğu bir Dir vardır OLDFILE.zip
ve sıkıştırılmış olan her şey Dosya'da da listelenir, .zip_log
bu yüzden .zip_log
bu Dir'de de var ama LOGFILE_DIR
bende var:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
sabit bir bağlantı olduğu için eşit dosya.
logrotate
zarif bir çözümdür