VPN денсаулығын тексеру минут сайын бір жол қосып, үнсіз екінші міндетті тудырады: сол жолдардың дискіден қалай шығатынын шешу. Туннельді жөндеу бұл міндетке ештеңе жасамайды, ал файлды қайта атау әлі ескі дескрипторды ұстаған процесті қайта бағыттамайды. Алдымен қабылдағыш туралы сұраққа жауап беріңіз, содан кейін айналдыруды жазушының оны ашу тәсіліне сәйкестендіріңіз.

Айналдыру саясатынан бұрын қабылдағышты таңдаңыз

Өз шығысын журналға жіберіп жатқан systemd бірлігі сақтауды бір жерде ұстайды. journald SystemMaxUse және MaxRetentionSec сияқты шектеулерді қолданады, сондықтан сол жерде журнал жүргізетін күзетші қосымша жұмыссыз шектеуді мұралайды. Оның қасына екінші шексіз файл қосу пайдасыз қызмет көрсетуді екі еселейді.

Арнайы файл басқа бірдеңе оны оқығанда өз орнын алады: талдаушы, аудит экспорты немесе тұрақты жолды күтетін бет. Бұл шешім қабылданғаннан кейін файлға иесі, режимі және айналдыру саясаты бірге жазылуы керек, өйткені үшеуі тек жиынтық ретінде дұрыс. Кез келген адам жасай алатын жолды кез келген адам ауыстыра алады, сондықтан каталог рұқсаттары сол жазбаға жатады. Осының бәрін тексерудің қасына жазыңыз, келесі өңдеу сол фактілерден басталады.

Блокты жазушыға сәйкес жазыңыз

Әр шақыруда жолды ашатын, бір жол қосатын және шығатын жазушыдан бастаңыз. Бұл үлгі процестің ешқандай көмегінсіз айналдырудан өтеді, өйткені келесі іске қосу сол жолда қазір тұрған файлды ашады. Төмендегі блок бір апта нұсқаны сақтайды және файлды жазушыға қажет ие мен режиммен қайта жасайды:

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

logrotate нұсқаулығы санды сақталатын айналдырылған нұсқалардың саны ретінде анықтайды, жеті күндік тарихтың кепілі ретінде емес, ал daily кілт сөзі өз жоспарлаушысы ретінде әрекет етудің орнына тапсырма орындалғанда бағаланады. Көптеген дистрибутивтерде systemd таймері немесе cron жазбасы бұл шақыруға әлдеқашан ие, сондықтан екіншісін қоспас бұрын қайсысы бар екенін тексеріңіз. Иелікті сәйкестендіру сақтау санынан маңыздырақ. Тек root үшін режимді қызметтік тіркелгі жазған файлға көшіру келесі айналдыруда журналды тоқтатады, ал ақау сағаттар өткен соң қате ретінде емес, ескірген уақыт белгісі ретінде көрінеді. Блокты басқа жерден көшірмес бұрын жазушының пайдаланушысын растаңыз.

Ешқашан қайта ашпайтын жазушыға басқа түзету керек

Ашық дескрипторды ұстап тұрған ұзақ жұмыс істейтін процесс қайта аталған inode-ке жаза береді. Орын босамайды және көрінетін файл өсуді тоқтатады, бұл inode-ті тексергенше сынған айналдыру сияқты көрінеді. Не процесске қайта ашуды үйретіңіз, не айналдыруды қайта атаудың орнына көшіріп қидырыңыз.

Қайта ашу жолы бағдарлама қолдайтын жерде тазарақ: құжатталған сигналды жіберіңіз немесе құжатталған пәрменді орындаңыз, ал процесс жаңа файлды өзі ашсын. Балама — copytruncate , ол мазмұнды айналдырылған атауға көшіріп, содан кейін түпнұсқаны сол орнында қияды, сондықтан дескриптор жарамды болып қалады, бірақ көшіру мен қию арасындағы жазбалар жоғалады.

systemd іске қосатын бірліктер үшін StandardOutput журналға немесе файлға бағыттаңыз да, өмірлік циклді бірлікке қалдырыңыз. Өлшем шегі жоқ tee -a арқылы қосатын shell циклі ақау кезінде бөлімді толтыратын құрылым, өйткені сәтсіз тексеріс сау тексерістен әлдеқайда көп жазады.

Таймерді күтпей айналдыруды тексеріңіз

Жөндеу режимі не болатынын хабарлайды және ештеңеге тимейді, бұл оны өңдеуден кейінгі қауіпсіз бірінші іске қосу етеді. Риза болғанда нақты айналдыруды мәжбүрлеңіз, содан кейін келесі журнал жолы қайта аталған файлға емес, жаңа файлға түсетінін растаңыз:

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

Шығысты сол ретпен оқыңыз. Жөндеу өтуі файлды және ойластырған әрекеттерді атауы керек; мәжбүрленген іске қосу күтілген айналдырылған атауды шығаруы керек; tail жазушы қайта жұмыс істегеннен кейін жаңа жазбаны көрсетуі керек. Өсіп келе жатқан df мәні мен кішірейіп келе жатқан көрінетін файл жоғарыда сипатталған дескриптор мәселесін білдіреді.

Нұсқалар бұрыннан бар кезде сақтау қалай әрекет ететінін көру үшін мәжбүрленген іске қосуды екі рет қайталаңыз. Ең ескі файлды жою күтілетін нәтиже, ал жоюдың болмауы әдетте айналдырылған атаудағы сан немесе әмбебап таңба logrotate жасағанға сәйкес келмейтінін білдіреді.

Кері қайтаруды және жазбаша есепті сақтаңыз

Өңдеуден бұрын алдыңғы блокты сақтаңыз және оны қай жоспарлаушы іске қосатынын жазыңыз, өйткені файлды қалпына келтіріп, таймерді келтірмейтін кері қайтару бастапқы мәселенің жартысын қайталайды. Қалпына келтіргеннен кейін бір рет қолмен айналдырыңыз, содан кейін жазушының тіркелгісі журнал жолына жаза алатынын растаңыз. Егер қызмет systemd астында жұмыс істесе, оның шығысын қайта бағыттаудағы кез келген өзгерістен кейін бірлікті қайта жүктеңіз, өйткені жұмыс істеп тұрған процесс ескі мақсатқа жаза береді. Бірлік таза қайтты деп сенудің орнына келесі бірнеше журнал жолын өзіңіз оқыңыз.

Режимді, иесін, сақтау санын және күтілетін дискілік бюджетті тексерудің дәл қасына жазыңыз. Кейін тексеріс бір реттік скрипттен демонға айналғанда, айналдыру саясаты онымен бірге өзгеруі керек, және сол жазба келесі адамға қай болжамның бұзылғанын айтады.

Соңында, журнал шешімін қалпына келтіру шешімінен бөлек ұстаңыз. Сәтсіз тексеріс қосылымның өз қалпына келтіру саясатына сүйенуі керек, logrotate ішінде жасырылған ережеге емес, және ешбір журнал құрылымы жұмыс істеп тұрған туннельді қайта іске қосудың себебі болмауы керек.

Қатысты мақалалар