Saya memang menggunakan, alih-alih mv
, cp
perintah untuk mencapainya sehingga Anda dapat memiliki beberapa file log di tempat di mana Perangkat Lunak berjalan. Mungkin di direktori home User yang berbeda atau di dir aplikasi dan memiliki semua log di satu tempat sebagai hardlink. Jika Anda menggunakan mv
perintah, Anda kehilangan tautan yang sulit. Jika Anda menggunakan cp
perintah, Anda akan menyimpan tautan keras ini.
kode saya adalah sesuatu seperti:
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
Jadi jika file berada pada Filesystem yang sama Anda dapat memberikan juga beberapa hak berbeda kepada pengguna dan ${LOGFILE_DIR}
Anda memodifikasi panjang seperti yang saya lakukan.
Jika itu mv
perintah Anda kehilangan hardlink antara file dan file kedua Anda tidak lebih terhubung dengan yang pertama - mungkin ditempatkan beberapa tempat lain.
Jika di tempat lain Anda tidak mengizinkan seseorang untuk menghapus file log Anda tetap bersama dan dikontrol dengan baik melalui skrip Anda sendiri.
logrotate
mungkin lebih baik. Tapi saya senang dengan solusi ini.
Jangan diganggu oleh "" tetapi dalam kasus saya ada beberapa file dengan spasi dan huruf khusus lainnya di dalam dan "" Jika saya tidak melakukan "" sekitar atau {} seluruh banyak tidak berfungsi dengan baik.
Sebagai contoh ada Dir di mana file yang lebih lama otomatis dizip menjadi OLDFILE.zip
dan segala sesuatu yang di-zip juga tercantum dalam File .zip_log
sehingga .zip_log
ada di Dir ini juga tetapi di LOGFILE_DIR
saya punya dengan:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
file yang sama dengan itu adalah tautan keras.
logrotate
adalah solusi elegan