Saya memang menggunakan, alih-alih mv, cpperintah 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 mvperintah, Anda kehilangan tautan yang sulit. Jika Anda menggunakan cpperintah, 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.
logrotatemungkin 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.zipdan segala sesuatu yang di-zip juga tercantum dalam File .zip_logsehingga .zip_logada di Dir ini juga tetapi di LOGFILE_DIRsaya punya dengan:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
file yang sama dengan itu adalah tautan keras.
logrotateadalah solusi elegan