1. Tapşırığın qoyuluşu
Bu gün saytın əlçatanlığını yoxlayan və nəticəni log-fayla yazan real bir skript yazacağıq, sonra bu skriptin işə salınmasını cron vasitəsilə avtomatlaşdıracağıq.
Nə etmək istəyirik?
Biz belə bir bash skript yaradacağıq:
- Verilmiş saytın əlçatanlığını
pingvasitəsilə yoxlayacaq. - Yoxlama nəticəsini, tarixi və vaxtı daxil olmaqla jurnal faylına qeyd edəcək.
- Bu skripti hər 5 dəqiqədən bir avtomatik işə salacaq,
cronilə.
Niyə bu vacibdir?
Real həyatda veb-saytların və serverlərin əlçatanlığının monitorinqi sistem administratorlarının əsas vəzifələrindən biridir. Məsələn, əgər saytınız (və ya serveriniz) qəfil cavab verməyi dayandırdısa, bunu mümkün qədər tez öyrənmək istəyərsiniz. Belə ssenari nəinki monitorinq üçün, həm də iş müsahibələrində və ya praktiki işdə faydalıdır.
2. Addım 1: Sadə bash-skriptin yazılması
- Yoxlanılmalı olan sayt ünvanını təyin edəcəyik.
- Serverə sorğu göndərmək üçün
pingistifadə edəcəyik. - Cavabın mövcud olub olmadığını yoxlayacağıq.
- Nəticəni log faylda saxlayacağıq.
Gəlin site_check.sh faylını yaradaq:
#!/bin/bash
# Veb sayt ünvanını təyin edirik
WEBSITE="example.com"
# Nəticələrin log faylı
LOG_FILE="/var/log/site_status.log"
# Saytın əlçatanlığını ping ilə yoxlayırıq
if ping -c 1 $WEBSITE &> /dev/null; then
# Əgər sayt əlçatandırsa
echo "$(date): $WEBSITE əlçatandır" >> $LOG_FILE
else
# Əgər sayt əlçatan deyilsə
echo "$(date): $WEBSITE əlçatan deyil" >> $LOG_FILE
fi
Kodun izahı:
#!/bin/bash— skriptin Bash istifadə edilərək icra olunmalı olduğunu göstərir.WEBSITE="example.com"— yoxlanılmalı olan saytın ünvanı.example.com-u istənilən başqa sayt və ya serverlə əvəz edə bilərsiniz.ping -c 1 $WEBSITE— göstərilən sayta bir (-c 1) paket göndərir. Əgər sayt cavab verirsə, komanda sıfır kodu ilə başa çatır. Əks halda, səhv ilə başa çatır.&> /dev/null— standart çıxışı və səhvləri "qara dəliyə" yönləndirir (bizpingçıxışını konsolda görmək istəmirik).$(date)— mesaja cari tarix və saat əlavə edir.>> $LOG_FILE— nəticəni log faylının sonuna əlavə edir.
3. Addım 2: Skripti manuel olaraq işə salmaq
Skripti avtomatlaşdırmadan əvvəl onun işlədiyini yoxlayaq.
Skripti
site_check.shadlı faylda saxlayın.Onu icra olunabilən edin:
chmod +x site_check.shİşə salın:
sudo ./site_check.sh
Skripti işə saldıqdan sonra /var/log/site_status.log faylını açın ki, yoxlama nəticələrinin log-a əlavə edildiyini görəsiniz. Bu əmri istifadə edin:
cat /var/log/site_status.log
Əgər hər şey qaydasındadırsa, belə bir sətir görməlisiniz:
Mon Oct 30 14:35:22 UTC 2023: example.com əlçatandır
4. Addım 3: cron istifadə edərək avtomatik icra konfiqurasiyası
Artıq bilirik ki, cron tapşırıqları cədvəl üzrə başlada bilər. İndi cron-u elə konfiqurasiya edəcəyik ki, skriptimiz hər 5 dəqiqədən bir işə düşsün.
crontab redaktəsi
crontab redaktorunu açın:
crontab -e
Aşağıdakı sətiri əlavə edin:
*/5 * * * * /path/to/site_check.sh
İzah:
*/5— tapşırığın hər 5 dəqiqədən bir başlamağını göstərir./path/to/site_check.sh— skriptimizin tam yolu. Yolun düzgün olduğuna əmin olun. Məsələn, əgər skript istifadəçinin ev kataloqunda yerləşirsə, yol belə bir şey olacaq:/home/your_username/site_check.sh.
Dəyişiklikləri saxladıqdan sonra cron skripti hər 5 dəqiqədən bir işə salmağa başlayacaq. Tapşırığın əlavə olunmasını yoxlamaq üçün aşağıdakı əmri icra edin:
crontab -l
5. Addım 4: cron işini yoxlamaq
İndi avtomatlaşdırmanın işlədiyini yoxlayaq. 5-10 dəqiqə gözləyin və log faylını yenidən açın:
cat /var/log/site_status.log
Hər 5 dəqiqədən bir yenilənmiş yeni qeydləri görməlisiniz. Məsələn:
Mon Oct 30 14:35:22 UTC 2023: example.com əlçatandır
Mon Oct 30 14:40:22 UTC 2023: example.com əlçatandır
Mon Oct 30 14:45:22 UTC 2023: example.com əlçatandır
6. Tipik suallar və səhvlərin analizi
Ping 'Permission denied' səhvini göstərir
Əgər skripti adi bir istifadəçi adından işə salırsansa, ola bilsin ki, onun kifayət qədər hüquqları yoxdur. Skripti
sudoilə işə sal və ya icra hüquqları əlavə et.Log faylı yaradılmır
Log faylı (
/var/log/site_status.log) üçün yolun düzgün qeyd edildiyinə və istifadəçinin həmin kataloqa yazma hüququ olduğuna əmin ol. Əgər log faylı yoxdursa, onu əl ilə yaratmaq üçün bu komandaları yerinə yetir:sudo touch /var/log/site_status.log sudo chmod 666 /var/log/site_status.logcronskripti başlamırXidmətin
cronişləyib işləmədiyini yoxla:sudo systemctl status cronOnun statusu
active (running)olmalıdır. Əgər dayandırılıbsa, onu belə başladırsan:sudo systemctl start cronSkript cron-da icra olunmur, amma əl ilə işləyir
Skriptin və istifadə olunan bütün faylların yolunun tam olaraq göstərildiyinə əmin olun.
crontapşırıqları üçün ətraf mühit dəyişənləri (məsələn,$PATH) fərqli ola bilər. Ən yaxşısı tam yollar istifadə etməkdir.
7. Təkmilləşdirmələr və əlavə tapşırıqlar
Veb saytların filtrasiyası
Skripti elə genişləndirin ki, bir neçə saytın əlçatanlığını yoxlasın. Məsələn:
WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
if ping -c 1 $SITE &> /dev/null; then
echo "$(date): $SITE əlçatandır" >> $LOG_FILE
else
echo "$(date): $SITE əlçatan deyil" >> $LOG_FILE
fi
done
Bildirişlərin göndərilməsi
Əgər sayt əlçatan deyilsə, bildiriş göndərməyi əlavə edin. Məsələn, email göndərmək üçün mail komandasından istifadə edərək:
# Email ilə bildiriş
if ! ping -c 1 $WEBSITE &> /dev/null; then
echo "$WEBSITE əlçatan deyil!" | mail -s "Website Check Alert" your_email@example.com
fi
Dövri log yazma
Log-faylın ölçüsünü, məsələn, 1 MB ilə məhdudlaşdırın. Əgər fayl çox böyük olarsa, onu təzə bir log-fayl kimi arxivləşdirərək yenisini başladın.
Təbriklər! İndi sən bash-skriptlərdən və cron vasitəsilə real tapşırıqların avtomatlaşmasından istifadə etməyi bacarırsan. Bu bacarıqlar xüsusilə DevOps mühəndisləri və sistem administratorları üçün çox tələb olunan biliklərdir.
GO TO FULL VERSION