CodeGym /Kursy /Docker SELF /Tworzenie prostego bash-skrpytu do automatyzacji zadań za...

Tworzenie prostego bash-skrpytu do automatyzacji zadań za pomocą cron

Docker SELF
Poziom 3 , Lekcja 6
Dostępny

Tworzenie prostego bash-skrpytu do automatyzacji zadań za pomocą cron

1. Definiowanie zadania

Dziś napiszemy prawdziwy skrypt, który sprawdza dostępność strony internetowej i zapisuje wynik w pliku logów, a następnie zautomatyzujemy jego uruchamianie za pomocą cron.

Co chcemy zrobić?

Stworzymy skrypt bash, który:

  1. Sprawdza dostępność podanej strony internetowej za pomocą ping.
  2. Zapisuje wynik sprawdzenia w pliku logów, w tym czas i datę.
  3. Automatycznie uruchamia ten skrypt co 5 minut za pomocą cron.

Dlaczego to jest ważne?

W prawdziwym świecie monitorowanie dostępności stron internetowych i serwerów jest jednym z kluczowych zadań administratorów systemów. Na przykład, jeśli Twoja strona (lub serwer) nagle przestała odpowiadać, chcesz dowiedzieć się o tym tak szybko, jak to możliwe. Taki scenariusz jest przydatny nie tylko do monitorowania, ale także podczas rozmów kwalifikacyjnych lub w codziennej pracy.


2. Krok 1: Pisanie prostego bash-skryptu

Zaczniemy od napisania podstawowego bash-skryptu. Oto krok po kroku, co on będzie robił:

  1. Ustawimy adres strony internetowej, którą trzeba sprawdzać.
  2. Użyjemy ping w celu wysłania zapytania do serwera.
  3. Sprawdzimy, czy otrzymano dostępny odpowiedź.
  4. Zapiszemy wynik do pliku logów.

Zróbmy plik site_check.sh:

#!/bin/bash

# Określamy adres strony internetowej
WEBSITE="example.com"

# Plik do logowania wyników
LOG_FILE="/var/log/site_status.log"

# Sprawdzamy dostępność strony za pomocą ping
if ping -c 1 $WEBSITE &> /dev/null; then
    # Jeśli strona jest dostępna
    echo "$(date): $WEBSITE jest osiągalna" >> $LOG_FILE
else
    # Jeśli strona jest niedostępna
    echo "$(date): $WEBSITE jest nieosiągalna" >> $LOG_FILE
fi

Wyjaśnienie kodu:

  1. #!/bin/bash — wskazuje, że ten skrypt powinien być wykonywany z użyciem Bash.
  2. WEBSITE="example.com" — adres strony, którą trzeba sprawdzić. Możesz zamienić example.com na dowolną stronę lub serwer, który chcesz monitorować.
  3. ping -c 1 $WEBSITE — wysyła jeden (-c 1) pakiet do wskazanej strony. Jeśli strona odpowiada, komenda kończy się z kodem 0. Jeśli nie — z błędem.
  4. &> /dev/null — przekierowuje standardowe wyjście i błędy do "czarnej dziury" (nie chcemy widzieć wyniku ping w konsoli).
  5. $(date) — dodaje aktualną datę i godzinę do wiadomości.
  6. >> $LOG_FILE — dopisuje wynik na końcu pliku logów.

3. Krok 2: Ręczne uruchamianie skryptu

Zanim zautomatyzujemy wykonywanie skryptu, upewnijmy się, że działa poprawnie.

  1. Zapisz skrypt w pliku site_check.sh.

  2. Nadaj mu uprawnienia do wykonywania:

    chmod +x site_check.sh
    
  3. Uruchom go:

    sudo ./site_check.sh
    

Po wykonaniu skryptu, otwórz plik /var/log/site_status.log, aby upewnić się, że wynik sprawdzenia został dodany do logu. Użyj komendy:

cat /var/log/site_status.log

Jeśli wszystko działa, powinieneś zobaczyć linię w stylu:

Mon Oct 30 14:35:22 UTC 2023: example.com is reachable

4. Krok 3: Konfiguracja automatycznego wykonywania z użyciem cron

Wiemy już, że cron pozwala na uruchamianie zadań według harmonogramu. Teraz skonfigurujemy cron, aby nasz skrypt uruchamiał się co 5 minut.

Edycja crontab

Otwórz edytor crontab:

crontab -e

Dodaj następującą linię:

*/5 * * * * /path/to/site_check.sh

Wyjaśnienie:

  • */5 — wskazuje, że zadanie powinno być uruchamiane co 5 minut.
  • /path/to/site_check.sh — pełna ścieżka do naszego skryptu. Upewnij się, że jest poprawna. Na przykład, jeśli skrypt znajduje się w katalogu domowym użytkownika, ścieżka może wyglądać tak: /home/your_username/site_check.sh.

Po zapisaniu zmian cron zacznie uruchamiać skrypt co 5 minut. Aby upewnić się, że zadanie zostało dodane, wykonaj:

crontab -l

5. Krok 4: Sprawdzanie działania cron

Teraz sprawdźmy, czy automatyzacja działa. Poczekaj 5-10 minut i otwórz ponownie plik logów:

cat /var/log/site_status.log

Powinieneś zobaczyć nowe wpisy, które aktualizują się co 5 minut. Na przykład:

Mon Oct 30 14:35:22 UTC 2023: example.com jest dostępny
Mon Oct 30 14:40:22 UTC 2023: example.com jest dostępny
Mon Oct 30 14:45:22 UTC 2023: example.com jest dostępny

6. Omówienie typowych pytań i błędów

  1. Ping zwraca błąd 'Permission denied'

    Jeśli uruchamiasz skrypt jako zwykły użytkownik, możliwe, że nie masz wystarczających uprawnień. Uruchom skrypt z sudo lub nadaj uprawnienia do wykonywania.

  2. Plik logów się nie tworzy

    Upewnij się, że ścieżka do pliku logów (/var/log/site_status.log) jest poprawna i że twój użytkownik ma uprawnienia do zapisu w tym katalogu. Jeśli pliku nie ma, stwórz go ręcznie za pomocą:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron nie uruchamia skryptu

    Sprawdź, czy usługa cron działa:

    sudo systemctl status cron
    

    Powinna być w statusie active (running). Jeśli jest zatrzymana, uruchom ją:

    sudo systemctl start cron
    
  4. Skrypt nie działa w cron, ale działa ręcznie

    Upewnij się, że ścieżka do skryptu i wszystkich używanych plików jest podana w pełni. W zadaniach cron zmienne środowiskowe (np. $PATH) mogą być inne. Lepiej używać ścieżek absolutnych.


7. Ulepszenia i dodatkowe zadania

Filtrowanie stron internetowych

Rozbuduj skrypt tak, aby sprawdzał dostępność kilku stron. Na przykład:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE jest dostępna" >> $LOG_FILE
    else
        echo "$(date): $SITE jest niedostępna" >> $LOG_FILE
    fi
done

Wysyłanie powiadomień

Dodaj wysyłanie powiadomień, gdy strona jest niedostępna. Na przykład, używając polecenia mail do wysyłania emaili:

# Powiadomienie email
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE nie działa!" | mail -s "Website Check Alert" your_email@example.com
fi

Cykliczne logowanie

Ogranicz rozmiar pliku logu do, powiedzmy, 1 MB. Jeśli plik stanie się zbyt duży, zmień jego nazwę (jako archiwum) i rozpocznij nowy log.


Gratulacje! Teraz wiesz, jak używać skryptów bash i cron do automatyzacji prawdziwych zadań. Te umiejętności są szczególnie cenione u inżynierów DevOps i administratorów systemowych.

1
Опрос
Usługi Linux,  3 уровень,  6 лекция
недоступен
Usługi Linux
Usługi Linux
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION