**logrotate** — ხელსაწყო, ჟურნალიზაციის ფაილების ადმინისტრირებისთვის. მისი ძირითადი დანიშნულებაა შეკუმშოს, შეინახოს ან წაშალოს ფაილი, მისი არსებობის ხანგრძლივობის ან ზომის მიხედვით.

ჟურნალიზაციის ყოველი ფაილისთვის logrotate ასრულებს ორ ოპერაციას ერთდროულად:

1. compression (შეკუმშვა): ჟურნალიზაციის ფაილების შეკუმშვა (გარკვეული ალგორითმით ფაილის ზომის შემცირება, იმ პირობით რომ სურვილის შემთხვევაში შიგთავსი აღდგება მაქსიმალური სიზუსტით).
2. rotate (ბრუნვა): შეკუმშული ფაილისთვის სახელის მინიჭება გარკვეული გაფართოებით (შეიძლება იყოს რიცხვი ან თარიღი), ამასთან, საჭიროების შემთხვევაში უფრო ძველი ფაილების განადგურება.

logrotate\_ის გამოყენების დადებითი მხარე, მყარ დისკზე ჟურნალიზაციის ფაილების მიერ დაკავებული ადგილის შემცირებაა, რაც იცავს ფიზიკურ მოწყობილობას გადავსებისგან. თუმცა, უნდა აღინიშნოს, რომ ამ პროცესს მეტი რესურსი სჭირდება, ვიდრე უბრალოდ ინფორმაციის ფაილში ჩაწერას. კერძოდ, ის მოითხოვს მეტი მეხსიერებისა და პროცესორის გამოყენებას.

ინსტალაცია
----------

როგორც წესი, logrotate თავიდანვე დაყენებულია ოპერაციულ სისტემაზე, მაგრამ თუ არ არის, მაშინ საჭიროა ***logrotate*** პაკეტის ინსტალაცია, მაგალითად, Debian-ის ან Ubuntu-სთვის შემდეგნაირად:

```
apt-get install logrotate

```
იმაში დასარწმუნებლად, რომ ეს პაკეტი დაყენებულია, გაუშვით ბრძანება

```
logrotate

```
ბრძანების ასეთი სახით გაშვება მხოლოდ ინფორმაციას მოგაწვდით და არ ექნება ზეგავლენა სხვა რაიმე პროცესზე. შედეგი კი შეიძლება იყოს შემდეგი ტექსტი, სადაც მოცემულია მცირედი ინფორმაცია: logrotate\_ს ვერსია, ლიცენზიის ტიპი და პარამეტრების ჩამონათვალი.

```
logrotate 3.8.7 - Copyright (C) 1995-2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License

Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command] [-s|--state=statefile]
 [-v|--verbose] [--version] [-?|--help] [--usage] [OPTION...] <configfile>

```
logrotate \_ზე უფრო ვრცელი ინფომარმაციის ნახვა შესაძლბელია man logrotate, info logrotate, logrotate --help და სხვ. ბრძანებების დახმარებით.

კონფიგურაცია
------------

კონფიგურაციის ფაილები განსაზღვრავენ კონკრეტული ჟურნალიზაციის ფაილის ან ფაილების როტაციისა და შეკუმშვის მიმდინარეობის პროცესს.

ვნახოთ ერთ-ერთი მათგანი ***/etc/logrotate.conf.*** მასში აღწერილია კონფიგურაციის ფაილის პარამეტრების დანიშნულება და ნაჩვენებია /var/log/wtmp და /var/log/btmp კონფიგურაცია. 

```
# see "man logrotate" for details
# rotate log files weekly 
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog. 
su root syslog

# keep 4 weeks worth of backlogs 
rotate 4

# create new (empty) log files after rotating old ones 
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
 missingok
 monthly
 create 0664 root utmp
 rotate 1
}

/var/log/btmp {
 missingok
 monthly
 create 0660 root utmp
 rotate 1
}
# system-specific logs may be configured here

```
კონფიგურაციის ფაილების შიგთავსი, ჩვეულებრივ, მომხმარებლებისთვის ხელმისაწვდომია, მათ შეუძლიათ წაკითხვა, მაგრამ ცვლილებების შეტანის უფლება მხოლოდ root \_ ს აქვს. მაგალითისთვის შეგიძლია ნახოთ ზემოთ ნაჩვენები ფაილის უფლებელი:

```
ls -l /etc/logrotate.conf 
-rw-r--r-- 1 root root 703 May 6 2015 /etc/logrotate.conf

```
ზოგიერთი აპლიკაციის ჟურნალიზაციის შესახებ კონკრეტული ინფორმაცია მოცემულია დირექტორიაში '***/etc/logrotate.d/'***

### **კონფიგურაციის ფაილის მაგალითი**

ავიღოთ ერთ-ერთი ფაილი /etc/logrotate.d-დან და განვიხილოთ. მაგალითად dpkg ( debien\_ის პაკეტ-მენეჯერი ) კონფიგურაციის ფაილი შეიძლება ასე გამოიყურებოდეს:

```
/var/log/dpkg.log { 
 monthly
 rotate 12
 compress
 delaycompress
 missingok
 notifempty
 create 644 root root
}

```

1. **/var/log**/dpkg.log ნიშნავს, რომ dpkg-ს კონფიგურაციის ფაილი „მეთვალყურეობს" */var/log* დირექტორიაში განთავსებულ ჟურნალიზაციის ფაილს *dpkg.log*-ს
2. **monthly** — „როტაციის ინტერვალი", logrotate აკეთებს როტაციას თვეში ერთხელ
3. **rotate 12** — ინახავს ჟურალიზაციის ფაილს 12 თვის განმავლობაში
4. **compress** — კუმშავს ჟურნალიზაციის ფაილს. შესაძლებელია გამოყენებული იყოს gzip ფორმატი—
5. **delaycompress** — ფუნქციონირებს მხოლოდ მაშინ თუ თან სდევს compress პარამეტრიც, იგი აყოვნებს შეკუმშვის პროცესს შემდეგ როტაციამდე
6. **missingok** — შეცდომების მიუხედავად არ წყვეტს პროცესს
7. **notifempty** — არ აკეთებს როტაციას თუ ჟურნალიზაციის ფაილი logrotate\_ს ცარიელი დახვდება
8. **create 644 root root** — ქმნის ჟურნალიზაციის ფაილს, რომელსაც ექნება უფლებები 644, მისი მფლობელი იქნება root და მისი მფლობელი ჯგუფის სახელი იქნება root

### **ჟურნალიზაციის ფაილების დახარისხება**

გამოვიყენოთ შემდეგი ბრძანება, dpkg\_ს ჟურნალიზაციის ფაილების სიის სანახავად:

```
ls -l /var/log/dpkg*

```
შედეგი შეიძლება იყოს ასეთი:

```
-rw-r--r-- 1 root root 27942 Jul 27 21:53 /var/log/dpkg.log
-rw-r--r-- 1 root root 2472 Jun 23 16:32 /var/log/dpkg.log.1
-rw-r--r-- 1 root root 944 May 9 12:29 /var/log/dpkg.log.2.gz
-rw-r--r-- 1 root root 7474 Apr 29 15:49 /var/log/dpkg.log.3.gz
-rw-r--r-- 1 root root 2484 Mar 26 21:12 /var/log/dpkg.log.4.gz
-rw-r--r-- 1 root root 801 Feb 17 21:14 /var/log/dpkg.log.5.gz
-rw-r--r-- 1 root root 451 Dec 5 2018 /var/log/dpkg.log.6.gz
-rw-r--r-- 1 root root 534 Nov 28 2018 /var/log/dpkg.log.7.gz
-rw-r--r-- 1 root root 2704 Apr 28 2018 /var/log/dpkg.log.8.gz
-rw-r--r-- 1 root root 155297 Mar 30 2018 /var/log/dpkg.log.9.gz

```
ფაილებს მართლაც 644 ატრიბუტები აქვთ, ისინი ეკუთვნიან root და ჯგუფიც root\_ისაა ანუ create შესრულებულია. ls გულისხმობის პრინციპით დროითი მაჩვენებლის მიხედვით ალაგებს ფაილებს, ამიტომ მარტვი შესამჩნევია, რომ ფაილები დალაგებულია ახლიდან ძველის მიმართულებით, იგი იქნებოდა ყოველთვე. მიმდინარე ფაილს, რომელშიც ამჟამად იწერება ინფორმაცია რიცხვითი გაფართოება არ აქვს, ხოლო დანარჩენების შემთხვევაში იგი იზრდება იმის მიხედვით, თუ რამდენად ძველია, ანუ მარტივად, თარიღების შეუმოწმებლადაც შეგვიძლია მივხვდეთ, რომ */var/log/dpkg.log.1* უფრო ახალ ინფორმაციას შეიცავს ვიდრე, მაგალითად */var/log/dpkg.log.4.*

ფაილების დასახელების ზოგადი შაბლონი ასეთია **name.log.number.gz**. ყოველთვიურად ინფორმცია ახლდება ამ ფაილებში, მაგრამ თავად სახელები უცვლელი რჩება. მორიგი განახლებისას */var/log/dpkg.log*\_ში ჩაწერილი შიგთავსი ჩაიწერება */var/log/dpkg.log.1*\_ში, ხოლო ამ უკანასკნელის */var/log/dpkg.log.2* \_ში და ასე გრძელდება სანამ */var/log/dpkg.log.9.gz* \_ის შიგთავსამდე არ მივა, ეს შიგთავსი კი წაიშლება. შედეგად მივიღებთ ცარიელ */var/log/dpkg.log*\_ს, რომელიც მზად იქნება ინფორმაციის მისაღებად და წაშლილ ყველაზე ძველ მონაცემებს. 

*/var/log/dpkg.log.1\_სა* და */var/log/dpkg.log.2.gz\_ის* განსხვავებაა gz, ეს გამოწვეულია delaycompress პარამეტრით. იგი უზრუნველყოფს ყველაზე ახალი, არამიმდინარე ფაილის შენარჩუნებას შეუკუმშავი სახით.

### **სტატუსი და შეწომება**

რათა დარწმუნდეთ, რომ ჟურნალიზაციის ფაილის როტაცია სწორად მიმდინარეობს ან რათა შეამოწმოთ როტაციის დრო და თარიღი , ეწვიეთ ფაილს */var/lib/logrotate/status*. იგი ადვილად იკითხება და შეიცავს ჟურნალიზაციის ფაილის სახელსა და თარიღს, რომელშიც მან განიცადა ბოლო როტაცია.
  

```
**cat /var/lib/logrotate/status**
```

```
"/var/log/lpr.log" 2013-4-11
"/var/log/dpkg.log" 2013-4-11
"/var/log/pm-suspend.log" 2013-4-11
"/var/log/syslog" 2013-4-11
"/var/log/mail.info" 2013-4-11
"/var/log/daemon.log" 2013-4-11
"/var/log/apport.log" 2013-4-11

```

cron
----

სისტემაში , როგორც წესი ნაგულისხმები მნიშვენლობით არსებობს */etc/cron.daily/logrotate*. თუ */etc/logrotate.d/*\_ში ჩავწერთ კონფიგურაციის ფაილს, მაშინ ეს სკრიპტი დაინახავს მას და ავტომატურად შეასრულებს ყოველდღე.

ჟურნალიზაციის ფაილის შექმნა და logrotate\_ით მართვა
---------------------------------------------------

ვთქვათ, თავად გვინდა შევქმათ ჟურნალიზაციის ფაილი, რომელშიც ყოველ წამში ჩაიწერება test დირექტორიაში შემავალი ფაილების სახელების სია. ცხადია, გარკვეული დროის შემდეგ ჟურნალიზაციის ფაილის ზომა მკვეთრად გაიზრდება, ამიტომ მყარი დისკის გადავსების თავიდან ასაცილებლად, საჭიროა, ფაილის შეკუმშვა და ძველი ინფორმაციის დროულად წაშლა, ამასთან დროის ფაქტორის გარდა გასათვალისწინებელია ჟურნალიზაციის ფაილის ზომაც, მაგალითად, თუ ზომა აღემატება 10მბ მოხდეს როტაცია და შეკუმშვა.

ამოცანის შესასრულებლად, პირველ რიგში, დავწეროთ სკრიპტი \_ dir\_list.sh, რომელიც გადაამისამართებს ჟურნალიზაციის ფაილში ინფორმაციას (ჟურნალიზაციის ფაილში ჩასაწერად საჭიროა root\_ის უფლებები) :

```
#/bin/bash
while :
do
 ls -l ~/test >> /var/log/list_file.log
 sleep 1
done

```
მეორე ნაბიჯი დირექტორია /etc/logrotate.d -ში კონფიგურაციის ფაილის შექმნაა, ამიტომ უმჯობესი იქნება თუ შექმნილ ფაილს .conf გაფართოებას მივანიჭებთ. dir\_list.conf ასე გამოიყურება:

```
/var/log/list_file.log
{
daily
size 10M
rotate 300
delaycompress
notifempty
create 644 user user
}

```
თავდაპირველად იწერება ფაილის (ან ფაილების) სახელი, რომლის "მეთვალყურეობაც" კონფიგურაციის ფაილს ევალება. განსხვავება dpkg\_სა და dir\_list.conf\_ს შორის ზომის პარამეტრშია, კერძოდ size 10M.

უკვე შეგვიძლია dir\_list.sh სკრიპტი გავუშვათ და გადავდგათ მესამე ნაბიჯი ანუ გავუშვათ ბრძანება

```
logrotate -f /etc/logrotate.d/dir_list

```
პარამეტრი -f უზრუნველყოფს ჟურნალიზაციის ფაილის შემოწმებას ამ ბრძანების გაშვებისთანავე. ცხადია, თუ ამ დროს ფაილის file\_list.log ზომა აღემატება 10 მბ, logrotate აღარ დაელოდება დღის გასვლას და მაშინვე შექმნის file\_list.log.1 \_ს, მაგრამ არ შეკუმშავს, რადგან კონფიგურაციის ფაილში მითითებული გვაქვს delaycompress პარამეტრი. მოსალოდნელი შედეგის სისწორე კი შეგვიძლია შევამოწმოთ /var/lib/logrotate/status \_ში:

```
cat /var/lib/logrotate/status | grep list_file.log

```
ზომებთან დაკავშირებით ერთ პრობლემას შეიძლება გადავაწყდეთ, კერძოდ, თუ ამავე დღეს ჟურნალიზაციის ფაილის ზომა ისევ გადააჭარბებს 10მბ\_ს, logrotate არ შეამოწმებს ფაილს და შესაბამისად რეაგირება არ ექნება, ის დაელოდება მომდევნო დღეს და მხოლოდ ამის შემდეგ შეკუმშავს მას. რა თქმა უნდა, ჩვენ შეგვიძლია თავად ვადევნოთ თვალი ზომის ცვლილებას და თუ საჭიროდ ჩავთვლით ხელახლა გავუშვათ logrotate -f /etc/logrotate.d/dir\_list, მაგრამ ეს ძალიან მოუხერხებელი მიდგომა იქნება. ამ სიტუაციიდან სხვა გამოსავალიც არსებობს და ეს crontab-ია.იგი ყოველ საათში გაუშვებს ბრძანებას და იმოქმედებს ზომის შესაბამისად, ხოლო ყოველ ახალ დღეს ზომის მიუხედავად ( თუნდა არ აღემატებოდეს 10მბ ) მაინც გააკეთებს როტაციას.