Files
2026-06-18 08:25:00 +00:00

71 lines
3.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# modify by Puppet !!!
# verze:2.1
# defunije funkce pushLog() Notify() makePID() removePID()
# autor: Ales Cernik
#
: <<'COMMENT'
Skrypt init_sets.sh to uniwersalny plik pomocniczy (tzw. plik konfiguracyjny/biblioteczny), który jest wczytywany (poprzez polecenie source lub .) przez inne skrypty Bash, aby zapewnić im standaryzowane środowisko pracy. Z komentarzy wynika, że jest on zarządzany automatycznie przez system Puppet.
Oto co dokładnie robi i jakie funkcje udostępnia:
1. Inicjalizacja zmiennych i środowiska
Ustalenie nazwy uruchomionego skryptu (myScript) w celu ujednolicenia nazewnictwa plików.
Ustalenie katalogu logów (logDir). Skrypt szuka katalogu /opt/log, a jeśli go nie ma, próbuje /srv/log. Jeśli żaden nie istnieje przerywa działanie z błędem.
Ustalenie ścieżki docelowego pliku z logami (logFile), np. /opt/log/nazwa_twojego_skryptu.sh.log.
Pobranie nazwy hosta (myHost) oraz definicja adresu serwera monitoringu Nagios/Centreon (NAGIOSHOST="centreon.bisnode.cz").
Utworzenie ścieżki do pliku blokady/PID w /tmp/ dla danego skryptu (lock_file).
2. Definicje przydatnych funkcji (do użycia w innych skryptach)
Skrypt definiuje cztery główne funkcje, z których mogą korzystać skrypty nadrzędne:
pushLog() Zwykła funkcja logująca, która dopisuje przekazane do niej argumenty (tekst) na koniec zdefiniowanego pliku logu.
Notify() Służy do wysyłania pasywnych powiadomień do systemu monitoringu (Centreon/Nagios). Przyjmuje kod statusu (0=OK, 1=Warning, 2=Error) oraz wiadomość. Zapisuje wiadomość do lokalnego logu używając pushLog, a następnie wysyła alert do serwera Nagios za pomocą narzędzia send_nsca.
makePID() Implementuje mechanizm wyłączności (mutex), zapobiegając równoległemu uruchomieniu kilku instancji tego samego skryptu.
Czyta identyfikator procesu (PID) z pliku blokady.
Sprawdza w systemowym katalogu /proc/, czy proces o takim PID nadal żyje.
Jeśli proces działa funkcja bezgłośnie przerywa działanie kolejnej instancji skryptu.
Jeśli proces nie działa, zapisuje bieżący PID ($$) do pliku blokady i pozwala skryptowi kontynuować działanie. W razie błędu przy zapisie powiadamia Nagiosa i kończy z błędem.
removePID() Funkcja sprzątająca po prostu usuwa plik blokady (PID), aby zwolnić "kolejkę" dla kolejnych uruchomień skryptu.
Podsumowując: Jest to klasyczna "namiastka biblioteki" dla skryptów administracyjnych, ujednolicająca sposób ich logowania, raportowania błędów do systemu monitoringu oraz chroniąca przed zduplikowanym uruchomieniem zadań w tle (cron).
COMMENT
myScript=${0##*/}
#myPath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" #"
export logDir=${logDir:="/opt/log"}
[ ! -d $logDir ] && logDir="/srv/log"
[ ! -d $logDir ] && { "Neexistuje $logDir"; exit 1;}
logFile=${logDir}/${myScript}.log
myHost=$(/bin/hostname -a)
NAGIOSHOST="centreon.bisnode.cz"
lock_file=/tmp/${myScript}.pid
pushLog () {
echo "$1 $2 $3 $4 $5 $6 $7 $8 $9" >>$logFile
}
Notify () { # $1 - status 0=OK, 1=Warning, 2=Error $2 message
if [ ${NAGIOSHOST} != "" ]; then
pushLog $2
/bin/echo -e "${myHost};${myScript};${1};${2}" | /usr/sbin/send_nsca -H ${NAGIOSHOST} -d \;
fi
}
## vyhradni spousteni procesu
makePID () {
cat /dev/null >> $lock_file || { Notify 2 "nelze udelat PID file"; exit 1;}
read lastPID < $lock_file
# if lastPID is not null and a process with that pid exists , exit
[ ! -z "$lastPID" -a -d /proc/$lastPID ] && exit
[ -z $$ ] && { Notify 2 "Chybi PID parametr" ; exit 1; }
echo $$ > $lock_file || { Notify 2 "Nelze zapsat PID" ; exit 1; }
}
removePID () {
rm $lock_file
}