In VPN-wachhûnlog rotearje sûnder de skriuwer te brekken
Kies earst it doel, en lit de rotaasje dan oanpasse by hoe’t de skriuwer it bestân iepenet: omneame foar koarte kontrôles, weriepenje of copytruncate foar in daemon.
In VPN-sûnenskonrole dy’t elke minút ien rigel taheakket, makket stil in twadde taak: beslute hoe’t dy rigels fan de skiif ôf geane. It reparearjen fan de tunnel docht neat foar dy taak, en it omneamen fan it bestân liedt in proses net om dat noch de âlde deskriptor hâldt. Beäntwurdzje earst de fraach nei it doel, en lit de rotaasje dan oanpasse by de wize hoe’t de skriuwer it iepenet.
Kies it doel foar it rotaasjebelied
In systemd-ienheid dy’t har útfier al nei it sjoernaal stjoert, hâldt it bewarjen op ien plak. journald twingt grinzen ôf lykas SystemMaxUse en MaxRetentionSec , dus in wachhûn dy’t dêr logt, erft in grins sûnder ekstra wurk. In twadde ûnbeheind bestân derneist tafoegje ferdûbelet it ûnderhâld sûnder winst.
In wijd bestân fertsjinnet syn plak as eat oars it lêst: in parser, in audit eksport of in side dy’t in stabile paad ferwachtet. As dat beslút nommen is, hat it bestân in eigner, in modus en in rotaasjebelied nedich dy’t tegearre opskreaun wurde, want de trije binne allinnich as set korrekt. In paad dat elkenien oanmeitsje kin, is ek in paad dat elkenien ferfange kin, dus de maprjochten hearre yn deselde notysje. Skriuw dat alles njonken de kontrôle en de folgjende bewurking begjint fan deselde feiten.
Skriuw it blok passend by de skriuwer
Begjin mei in skriuwer dy’t it paad by elke oprop iepenet, in rigel taheakket en ôfslút. Dat patroan oerlibbet rotaasje sûnder ienege gearwurking fan it proses, want de folgjende run iepenet it bestân dat op dat stuit op dat paad stiet. It blok hjirûnder hâldt in wike oan ferzjes en makket it bestân opnij oan mei de eigner en modus dy’t de skriuwer nedich hat:
/var/log/vpn-watchdog.log {
daily
rotate 7
create 0600 root root
missingok
notifempty
}
It logrotate-hânboek definiearret it oantal as it tal bewarre rotearre ferzjes, net as in garandearre sân dagen skiednis, en it kaaiwurd daily wurdt beoardiele as de taak rint ynstee fan as eigen planner te fungearjen. Op de measte distribúsjes besit in systemd-timer of in cron-yngong dy oprop al, dus kontrolearje hokker bestiet foardat jo in twadde tafoegje. It eignerskip kloppend krije is wichtiger as it bewarje-oantal. In modus allinnich foar root kopiearje nei in bestân dat in tsjinstaccount skriuwt, stopet it loggen by de folgjende rotaasje, en de flater ferskynt oeren letter as in ferâldere tiidstimpel ynstee fan as in flater. Befêstigje de brûker fan de skriuwer foardat jo in blok earne oars wei kopiearje.
In skriuwer dy’t nea weriepenet, hat in oare oplossing nedich
In langrinnend proses dat in iepen deskriptor hâldt, bliuwt skriuwen nei de omneamde inode. Romte wurdt net frijmakke en it sichtbere bestân hâldt op te groeien, wat as in brutsen rotaasje liket oant jo de inode kontrolearje. Leer it proses of weriepenje, of meitsje de rotaasje kopiearje en ôfbrekke ynstee fan omneame.
It weriepenpaad is it skjinste dêr’t de software it stipet: stjoer it dokumintearre sinjaal of rin it dokumintearre kommando, en lit it proses sels it nije bestân iepenje. It alternatyf is copytruncate , dat de ynhâld nei de rotearre namme kopiearret en dan it orizjineel op syn plak ôfbrekt, sadat de deskriptor jildich bliuwt mar skriuwen tusken de kopy en it ôfbrekken ferlern geane.
Foar ienheden dy’t troch systemd start wurde, rjochtsje StandardOutput op it sjoernaal of op in bestân en lit de ienheid de libbenssyklus besitte. In shell-lus dy’t fia tee -a taheakket sûnder grins oan grutte, is de ynrjochting dy’t in partysje by in stoaring follet, want in mislearjende kontrôle logt faak folle mear as in sûne.
Test de rotaasje sûnder op de timer te wachtsjen
Debuggmodus rapportearret wat barre soe en rekket neat oan, wat it de feilige earste run nei in bewurking makket. Twing in echte rotaasje as jo tefreden binne, en befêstigje dan dat de folgjende logrigel yn it nije bestân lânet ynstee fan yn it omneamde:
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
Lês de útfier yn dy folchoarder. De debugpass moat it bestân en de bedoelde aksjes neame; in twongen run moat de ferwachte rotearre namme produsearje; de tail moat in nije yngong sjen nei’t de skriuwer wer rint. In groeiende df-wearde mei in krimpende sichtber bestân betsjut it hjirboppe beskreaune deskriptorprobleem.
Werhelje de twongen run twa kear om te sjen hoe’t it bewarjen him hâldt as ferzjes al bestean. It âldste bestân wiskje is it ferwachte resultaat, en in ûntbrekkende wisking betsjut meastentiids dat it oantal of it jokerteken yn de rotearre namme net oerienkomt mei wat logrotate makke hat.
Hâld in weromsetten en in skreaune registraasje by
Bewarje it foarige blok foar it bewurkjen, en notearje hokker planner it rint, want in weromsetten dat it bestân mar net de timer werombringt, reprodusearret de helte fan it oarspronklike probleem. Rotearje nei it werombringen ien kear mei de hân, en befêstigje dan dat it account fan de skriuwer it logpaad skriuwe kin. As de tsjinst ûnder systemd rint, laad de ienheid dan wer nei elke feroaring oan har útfieromlieding, want it rinnende proses bliuwt nei it âlde doel skriuwen. Lês de folgjende pear logrigels sels ynstee fan te fertrouwen dat de ienheid skjin weromkaam.
Notearje de modus, de eigner, it bewarje-oantal en it ferwachte skiifbudzjet njonken de kontrôle sels. As de kontrôle letter fan in ienmalige skript nei in daemon feroaret, moat it rotaasjebelied dêrmei feroarje, en dy notysje fertelt de folgjende persoan hokker oanname bruts.
Hâld úteinlik it logbeslút los fan it herstelbeslút. In mislearre probe moat it eigen herstelbelied fan de ferbining folgje, net in regel ferstoppe yn logrotate, en gjin logynrjochting moat de reden wêze dat in wurkjende tunnel opnij start wurdt.