71 lines
3.6 KiB
Bash
71 lines
3.6 KiB
Bash
#!/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
|
||
}
|