1) Zapisuje date i godzine: Skrypt zapisuje aktualna date i godzine do pliku logu (/var/log/apt-upgrade.log), abys wiedzial, kiedy zostala przeprowadzona aktualizacja. 2) Pobiera wersje aktualnie uruchomionego jadra: Skrypt zapisuje wersje jadra systemowego, która jest obecnie uruchomiona (komenda uname -r). Jest to uzywane pózniej do sprawdzenia, czy nowe jadro zostalo zainstalowane po aktualizacji. 3) Wykonuje aktualizacje pakietów: Skrypt uruchamia sudo apt-get update, aby odswiezyc liste dostepnych pakietów. Nastepnie uruchamia sudo apt-get upgrade -y, aby zaktualizowac wszystkie zainstalowane pakiety do najnowszych dostepnych wersji. Parametr -y automatycznie potwierdza aktualizacje, eliminujac koniecznosc recznego potwierdzania. 4) Aktualizuje konfiguracje GRUB: Po zaktualizowaniu pakietów, skrypt uruchamia sudo update-grub, co aktualizuje konfiguracje bootloadera GRUB. Jest to wazne, szczególnie jesli zaktualizowane zostalo jadro, aby nowa wersja mogla byc poprawnie uruchomiona przy nastepnym starcie systemu. 5) Sprawdza, czy zostalo zainstalowane nowe jadro: Skrypt przeszukuje katalog /boot w poszukiwaniu plików zaczynajacych sie od vmlinuz-, które odpowiadaja zainstalowanym wersjom jadra. Pobiera wersje najnowszego zainstalowanego jadra i porównuje ja z wersja obecnie uruchomionego jadra (zapisanej wczesniej w current_kernel). 6) Decyduje o ponownym uruchomieniu systemu: Jesli nowo zainstalowane jadro rózni sie od aktualnie uruchomionego, skrypt automatycznie restartuje system (polecenie sudo reboot). Jesli nie ma nowego jadra, restart systemu nie jest wykonywany. 9) Zapisuje informacje o zakonczeniu operacji do logu: Skrypt na koniec zapisuje do pliku logu informacje o zakonczeniu aktualizacji, z podaniem daty i godziny. Podsumowanie: Skrypt ten automatyzuje proces aktualizacji systemu. Regularnie aktualizuje pakiety systemowe, dba o to, aby GRUB byl zaktualizowany, i w przypadku wykrycia nowego jadra uruchamia ponownie system. Wszystkie kroki sa zapisywane w pliku logu, dzieki czemu masz pelny wglad w to, co zostalo wykonane i kiedy. Skrypt moze byc uruchamiany automatycznie za pomoca crona, co pozwala na regularne, bezobslugowe aktualizowanie systemu bez potrzeby recznej interwencji, z jednoczesnym zapewnieniem, ze system uruchomi sie ponownie tylko wtedy, gdy jest to faktycznie wymagane (np. po aktualizacji jadra). ####################################################################################################### #!/bin/bash # Zapisanie daty i godziny do logu echo "-----------------------------------" >> /var/log/apt-upgrade.log echo "Aktualizacja systemu - Data: $(date)" >> /var/log/apt-upgrade.log echo "-----------------------------------" >> /var/log/apt-upgrade.log # Zapisanie aktualnej wersji jadra do zmiennej current_kernel=$(uname -r) # Wykonanie apt-get update i apt-get upgrade sudo apt-get update >> /var/log/apt-upgrade.log 2>&1 sudo apt-get upgrade -y >> /var/log/apt-upgrade.log 2>&1 # Wykonanie sudo update-grub sudo update-grub >> /var/log/apt-upgrade.log 2>&1 # Sprawdzenie, czy nowe jadro zostalo zainstalowane # Sprawdzanie plików w katalogu /boot, które zaczynaja sie od 'vmlinuz' new_kernel=$(ls /boot | grep -E '^vmlinuz-' | sed 's/vmlinuz-//g' | sort -V | tail -n 1) # Porównanie aktualnie uruchomionego jadra z nowym if [ "$current_kernel" != "$new_kernel" ]; then echo "Zainstalowano nowe jadro: $new_kernel" >> /var/log/apt-upgrade.log echo "System zostanie zrestartowany..." >> /var/log/apt-upgrade.log sudo reboot else echo "Brak nowego jadra. Restart systemu nie jest wymagany." >> /var/log/apt-upgrade.log fi # Informacja o zakonczeniu aktualizacji echo "Aktualizacja zakonczona - Data: $(date)" >> /var/log/apt-upgrade.log echo "-----------------------------------" >> /var/log/apt-upgrade.log ####################################################################################################### crontab -e 0 3 * * * /sciezka/do/skryptu/apt-update-upgrade.sh * * * * * command_to_execute | | | | | | | | | +---- dzien tygodnia (0 - 7) (niedziela to zarówno 0 jak i 7) | | | +------ miesiac (1 - 12) | | +-------- dzien miesiaca (1 - 31) | +---------- godzina (0 - 23) +------------ minuta (0 - 59) Na przyklad: 0 3 * * * uruchomi skrypt codziennie o 3:00 rano. 0 3 * * 1 uruchomi skrypt co poniedzialek o 3:00 rano.