Pemeriksaan kesihatan VPN yang menambah satu baris setiap minit diam-diam mencipta tugas kedua: memutuskan bagaimana baris itu meninggalkan cakera. Membaiki terowong tidak melakukan apa-apa untuk tugas itu, dan menamakan semula fail tidak mengubah hala proses yang masih memegang deskriptor lama. Jawab soalan destinasi dahulu, kemudian padankan putaran dengan cara penulis membukanya.

Pilih destinasi sebelum dasar putaran

Unit systemd yang sudah menghantar outputnya ke jurnal menyimpan pengekalan di satu tempat. journald menguatkuasakan had seperti SystemMaxUse dan MaxRetentionSec , jadi pengawas yang mencatat di sana mewarisi had tanpa kerja tambahan. Menambah fail kedua tanpa had di sebelahnya menggandakan penyelenggaraan tanpa faedah.

Fail khusus mendapat tempatnya apabila sesuatu yang lain membacanya: penghurai, eksport audit atau halaman yang menjangka laluan stabil. Setelah keputusan itu dibuat, fail memerlukan pemilik, mod dan dasar putaran yang ditulis bersama, kerana ketiga-tiganya hanya betul sebagai satu set. Laluan yang boleh dicipta sesiapa juga laluan yang boleh diganti sesiapa, jadi kebenaran direktori tergolong dalam nota yang sama. Tulis semuanya di sebelah pemeriksaan dan suntingan seterusnya bermula daripada fakta yang sama.

Tulis blok supaya sepadan dengan penulis

Mulakan dengan penulis yang membuka laluan pada setiap panggilan, menambah satu baris dan keluar. Corak itu bertahan putaran tanpa sebarang kerjasama daripada proses, kerana larian seterusnya membuka fail yang sedang berada pada laluan itu. Blok di bawah menyimpan seminggu versi dan mencipta semula fail dengan pemilik dan mod yang diperlukan penulis:

/var/log/vpn-watchdog.log {
    daily
    rotate 7
    create 0600 root root
    missingok
    notifempty
}

Manual logrotate mentakrifkan kiraan sebagai bilangan versi diputar yang disimpan, bukan sebagai jaminan tujuh hari sejarah, dan kata kunci daily dinilai apabila tugas berjalan bukannya bertindak sebagai penjadual sendiri. Pada kebanyakan pengedaran pemasa systemd atau entri cron sudah memiliki panggilan itu, jadi semak mana yang wujud sebelum menambah yang kedua. Memadankan pemilikan lebih penting daripada bilangan pengekalan. Menyalin mod khusus root ke fail yang ditulis akaun perkhidmatan menghentikan pencatatan pada putaran seterusnya, dan kegagalan muncul berjam-jam kemudian sebagai cap masa lapuk bukan sebagai ralat. Sahkan pengguna penulis sebelum menyalin blok dari tempat lain.

Penulis yang tidak pernah membuka semula memerlukan pembaikan lain

Proses jangka panjang yang memegang deskriptor terbuka terus menulis ke inode yang dinamakan semula. Ruang tidak dilepaskan dan fail yang kelihatan berhenti membesar, yang kelihatan seperti putaran rosak sehingga anda memeriksa inode. Sama ada ajar proses membuka semula, atau buat putaran menyalin dan memotong bukan menamakan semula.

Laluan buka semula lebih bersih di tempat perisian menyokongnya: hantar isyarat berdokumen atau jalankan arahan berdokumen, dan biarkan proses membuka fail baharu itu sendiri. Alternatifnya ialah copytruncate , yang menyalin kandungan ke nama diputar dan kemudian memotong asal di tempatnya, jadi deskriptor kekal sah tetapi tulisan yang berlaku antara salinan dan pemotongan hilang.

Untuk unit yang dimulakan oleh systemd, halakan StandardOutput ke jurnal atau ke fail dan biarkan unit memiliki kitaran hayat. Gelung shell yang menambah melalui tee -a tanpa had saiz ialah susunan yang memenuhi partition semasa gangguan, kerana pemeriksaan yang gagal sering mencatat jauh lebih banyak daripada yang sihat.

Uji putaran tanpa menunggu pemasa

Mod nyahpepijat melaporkan apa yang akan berlaku dan tidak menyentuh apa-apa, yang menjadikannya larian pertama yang selamat selepas suntingan. Paksa putaran sebenar apabila anda berpuas hati, kemudian sahkan bahawa baris log seterusnya mendarat dalam fail baharu bukan fail yang dinamakan semula:

logrotate -d /etc/logrotate.d/vpn-watchdog
logrotate -f /etc/logrotate.d/vpn-watchdog
ls -l /var/log/vpn-watchdog.log*
tail -n 3 /var/log/vpn-watchdog.log
df -h /var/log

Baca output dalam susunan itu. Larian nyahpepijat patut menamakan fail dan tindakan yang dimaksudkan; larian paksa patut menghasilkan nama diputar yang dijangka; tail patut menunjukkan entri baharu selepas penulis berjalan semula. Nilai df yang bertambah dengan fail kelihatan yang mengecil bermaksud masalah deskriptor yang diterangkan di atas.

Ulang larian paksa dua kali untuk melihat bagaimana pengekalan berkelakuan apabila versi sudah wujud. Memadam fail tertua ialah hasil yang dijangka, dan pemadaman yang tiada biasanya bermaksud kiraan atau aksara wildcard dalam nama diputar tidak sepadan dengan apa yang dicipta logrotate.

Simpan pengembalian dan rekod bertulis

Simpan blok sebelumnya sebelum menyunting, dan catat penjadual mana yang menjalankannya, kerana pengembalian yang memulihkan fail tetapi bukan pemasa menghasilkan semula separuh masalah asal. Putar sekali dengan tangan selepas pemulihan, kemudian sahkan akaun penulis boleh menulis ke laluan log. Jika perkhidmatan berjalan di bawah systemd, muat semula unit selepas setiap perubahan pada pengalihan outputnya, kerana proses yang berjalan terus menulis ke sasaran lama. Baca sendiri beberapa baris log seterusnya daripada mempercayai unit pulang dengan bersih.

Catat mod, pemilik, kiraan pengekalan dan belanjawan cakera yang dijangka di sebelah pemeriksaan itu sendiri. Apabila kemudian pemeriksaan berubah daripada skrip sekali jalan kepada daemon, dasar putaran mesti berubah bersamanya, dan nota itulah yang memberitahu orang seterusnya andaian mana yang rosak.

Akhir sekali, asingkan keputusan log daripada keputusan pemulihan. Pemeriksaan yang gagal harus mengikut dasar pemulihan sambungan itu sendiri, bukan peraturan tersembunyi dalam logrotate, dan tiada susunan pencatatan boleh menjadi sebab terowong yang berfungsi dimulakan semula.

Artikel berkaitan