#!/bin/bash

# Skrypt docron uruchamiający codzienne, cotygodniowe lub comiesięczne
# zadania systemowe w ciągu dnia, jeżeli nie zostały one wykonane o zadanej
# porze z powodu wyłączenia systemu.

rootcron="/etc/crontab"   # Ten zapis może znacznie się różnić w zależności od 
                          # używanej wersji systemu Unix lub Linux.

if [ $# -ne 1 ] ; then
  echo "U: $0 [daily|weekly|monthly]" >&2
  exit 1
fi

# Jeżeli skrypt nie został uruchomiony przez administratora, zgłaszany jest błąd.
# W poprzednich skryptach sprawdzana była nazwa użytkownika lub jego
# login. Tutaj sprawdzany jest identyfikator, który dla użytkownika root
# ma wartość 0.

if [ "$(id -u)" -ne 0 ] ; then
  # Tutaj można równie dobrze użyć warunku $(whoami) != "root".
  echo "$0: Skrypt musisz uruchomić jako 'root'." >&2
  exit 1
fi

# Zakładamy, że plik programu cron zawiera wpisy ze słowami
# 'daily', 'weekly' i 'monthly'. Jeżeli żadne z nich nie zostanie znalezione,
# zgłaszany jest błąd. Najpierw jednak sprawdzamy, czy takie
# słowa są (czego oczekujemy).

job="$(awk "NF > 6 && /$1/ { for (i=7;i<=NF;i++) print \$i }" $rootcron)"

if [ -z "$job" ] ; then   # Nie ma nic? Dziwne. Zgłaszamy błąd.
  echo "$0: Błąd: brak zadania $1 w pliku $rootcron." >&2
  exit 1
fi

SHELL='which sh'        # Zachowanie spójności z domyślnym ustawieniem programu cron.

eval $job               # Zakończenie skryptu po wykonaniu zadania.
