Sadə bir bash script yazmaq və işləri avtomatlaşdırmaq üçün cron
istifadə etmək
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ı
ping
vasitə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,
cron
ilə.
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
ping
istifadə 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.sh
adlı 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
sudo
ilə 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.log
cron
skripti başlamırXidmətin
cron
işləyib işləmədiyini yoxla:sudo systemctl status cron
Onun statusu
active (running)
olmalıdır. Əgər dayandırılıbsa, onu belə başladırsan:sudo systemctl start cron
Skript 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.
cron
tapşı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