⚙️

Automatyzacja Linux – praktyczne skrypty Bash i cron dla majsterkowicza

📅 5 maja 2026 ⏱ 10 min czytania 🏷️ Komputery i Linux 👁 4 odsłon
← Komputery i Linux

Bash (Bourne Again Shell) to język skryptowy wbudowany w każdy system Linux. Nawet podstawowe skrypty oszczędzają godziny ręcznej pracy. W tym artykule pokazujemy kilka gotowych, praktycznych skryptów z wyjaśnieniem każdego elementu.

Podstawy składni Bash

#!/bin/bash
# Pierwsza linia: shebang – mówi systemowi że to skrypt Bash

# Zmienne (bez spacji wokół '=')
KATALOG="/home/pi/projekty"
PLIK="backup.tar.gz"
DZISIAJ=$(date +%Y-%m-%d)  # $() podstawia wynik komendy

# Warunek
if [ -d "$KATALOG" ]; then
    echo "Katalog istnieje"
else
    echo "Brak katalogu"
fi

# Pętla for
for f in /home/pi/*.log; do
    echo "Znaleziono: $f"
done

# Funkcja
przywitaj() {
    local imie="$1"
    echo "Cześć, $imie!"
}
przywitaj "Arduino"
💡 Każdy skrypt musi mieć uprawnienia do wykonania: chmod +x skrypt.sh

Skrypt 1 – Automatyczna kopia zapasowa

#!/bin/bash
# backup.sh – tworzy kopię katalogu i usuwa stare backupy

ZRODLO="/home/pi/projekty"
CEL="/mnt/nas/backupy"
DATA=$(date +%Y%m%d_%H%M%S)
PLIK="backup_${DATA}.tar.gz"
ILE_ZACHOWAC=7  # liczba kopii do zachowania

mkdir -p "$CEL"
tar -czf "${CEL}/${PLIK}" "$ZRODLO" 2>/dev/null
echo "$(date): Backup $PLIK utworzony ($(du -sh ${CEL}/${PLIK} | cut -f1))"

# Usuń stare kopie (zostaw tylko $ILE_ZACHOWAC najnowszych)
ls -t "$CEL"/backup_*.tar.gz 2>/dev/null | tail -n +$((ILE_ZACHOWAC+1)) | xargs -r rm --
echo "Stare kopie usunięte, zostało: $(ls $CEL/backup_*.tar.gz 2>/dev/null | wc -l)"

Skrypt 2 – Monitor miejsca na dysku

#!/bin/bash
# dysk_alert.sh – wysyła powiadomienie gdy dysk > 80%

PROG_ALARMOWY=80
EMAIL="admin@example.com"

df -h | grep "^/dev/" | while read linia; do
    uzycie=$(echo $linia | awk '{print $5}' | tr -d '%')
    partycja=$(echo $linia | awk '{print $1}')

    if [ "$uzycie" -gt "$PROG_ALARMOWY" ]; then
        komunikat="UWAGA: $partycja zajęta w ${uzycie}%"
        echo "$komunikat"
        # Opcjonalnie wyślij email (wymaga skonfigurowanego sendmail/mailutils)
        # echo "$komunikat" | mail -s "Alert dysku" "$EMAIL"
        # Lub przez Telegram Bot API:
        # curl -s "https://api.telegram.org/botTOKEN/sendMessage?chat_id=ID&text=$komunikat"
    fi
done

Skrypt 3 – Ping monitor dla urządzeń IoT

#!/bin/bash
# iot_monitor.sh – sprawdza czy urządzenia w sieci odpowiadają

declare -A URZADZENIA
URZADZENIA["ESP32-salon"]="192.168.1.101"
URZADZENIA["RPi-NAS"]="192.168.1.50"
URZADZENIA["Router"]="192.168.1.1"

LOG="/var/log/iot_status.log"

for nazwa in "${!URZADZENIA[@]}"; do
    ip="${URZADZENIA[$nazwa]}"
    if ping -c 1 -W 2 "$ip" &>/dev/null; then
        status="OK"
    else
        status="BRAK ODPOWIEDZI"
        echo "$(date): $nazwa ($ip) – $status" | tee -a "$LOG"
    fi
    echo "$(date +%H:%M:%S) $nazwa ($ip): $status"
done

Skrypt 4 – Czyszczenie starych logów

#!/bin/bash
# czyszcz_logi.sh – usuwa logi starsze niż N dni

KATALOG_LOGOW="/var/log/mojaplikacja"
ILE_DNI=30

find "$KATALOG_LOGOW" -name "*.log" -mtime +$ILE_DNI -exec rm {} \;
echo "$(date): Usunięto logi starsze niż $ILE_DNI dni"

# Skompresuj logi z ostatniego tygodnia
find "$KATALOG_LOGOW" -name "*.log" -mtime +7 -not -name "*.gz" -exec gzip {} \;
echo "Skompresowano stare logi"

Harmonogramowanie z cron

# Edytuj harmonogram dla bieżącego użytkownika
crontab -e

# Format: minuta godzina dzień miesiąc dzień_tygodnia komenda
# * = każdy, */5 = co 5, 0 = konkretna wartość

# Backup o 2:30 w nocy każdego dnia
30 2 * * * /home/pi/skrypty/backup.sh >> /var/log/backup.log 2>&1

# Monitor dysku co 15 minut
*/15 * * * * /home/pi/skrypty/dysk_alert.sh

# Sprawdzenie IoT co minutę
* * * * * /home/pi/skrypty/iot_monitor.sh >> /var/log/iot.log 2>&1

# Czyszczenie logów raz w tygodniu (niedziela o 3:00)
0 3 * * 0 /home/pi/skrypty/czyszcz_logi.sh
✅ Testuj skrypty przed dodaniem do crona: uruchom ręcznie i sprawdź logi. Cron ma inne środowisko niż terminal (brak $PATH!) – używaj pełnych ścieżek do programów: /usr/bin/python3 zamiast python3.

Debugowanie skryptów

# Uruchom z trybem debugowania (wyświetla każdą wykonywaną linię)
bash -x skrypt.sh

# Dodaj na początku skryptu
set -e   # zatrzymaj przy błędzie
set -x   # debuguj każdą linię
set -u   # błąd gdy używasz niezadeklarowanej zmiennej
Tagi: automatyka bash cron linux skrypty