Bawie się ostatnio skryptami powłoki i postanowiłem napisać kilka uwag, które pozwolą tworzyć lepsze skrypty automatyzujące pracę systemu:
skrypt zawsze powinien logować swoje uruchomienie łącznie z czasem i parametrami, które zostały do niego podane (pozwala to określić czy skrypt został uruchomiony, kiedy został uruchomiony oraz jak powinien się zachować),
basename pozwoli okreslić Ci nazwę skryptu, który uruchamiasz bez całej ścieżki,
dirname pozwoli określić, gdzie skrypt się znajduje, możesz to wykorzystać do określenia położenia innych elementów
W weekend miałem przenieść dane z jednego data storage (opartego na ESS) na drugi (oparty na DS, dokładnie DS8000). Szukaliśmy komend typowo klastrowych ale raczej nic takiego nie ma ;). Po pierwszym teście okazało się że bezproblemowo można użyć migratelp :D. Jedna uwaga: oczywiście przenoszenie powinniśmy wykonywać z aktywnego noda.
Czasem trzeba posprzątać na dyskach, okazuje się że mirrory są źle zrobione albo ze względów wydajnościowych trzeba inaczej rozłożyć pp. Oczywiście możemy tutaj wykorzystać komende migratelp. Może tutaj przydać się prosty skrypt:
#!/bin/ksh
integer i=1 # counter for lp
integer b=2 # counter for pp
integer end=255 #last lp to move
while ((i <= $end));
do
print "moving logical partition $i " ;
migratelp samba_lv/$i/1 hdisk4/$b ;
migratelp samba_lv/$i/2 hdisk5/$b ;
(( i = i + 1)) ;
(( b = b + 1)) ;
done
Dla przypomnienia migratelp ma następującą składnie: migratelp logical_volumen/LP number/Mirror PVNAME(hdiskxx)/PPOn_disk
Skrypt analizuje listę volumenów grup, następnie dla każdej grupy tworzy listę logicznych volumenów a na koniec dla każdego z nich tworzy listę fizycznych volumenów, na których się on znajduje. Wynikowa lista jest w formacie csv.
Dostępny jest na stronie z skryptami: Skrypty / scripts
Nasze narzędzie raportowe powinno móc automatycznie stwierdzić (poprzedni skrypt miał to sztywno ustalone), zróbmy prosty skrypt który będzie analizował wynik polecenia „lsvg”:
Przygotowująć różnego rodzaju analizy, raporty itp przydaje się mieć możliwość stworzenia podsumowania na którym PV znajduje się określony LV (np. by sprawdzić czy na pewno mirrory disków są na różnych data storages). Poniżej znajduje się prosty skrypt (wymaga on oczywiście wprowadzenia poprawek i kilku zabezpieczeń, jak na przykład co zrobić gdy brak punktu mountowania ale to przykład poglądowy) pozwalający analizować wynik polecenia „lslv -l nazwa_lv”. Kompletny skrypt będzie niedługo dostepny na stronie „Skrypty”.
Poniższy skrypt pokazuje jak można w bardzo szybki a zarazem elegancki sposób analizować parametry podane do skryptu bashowego. Dla przypomnienia $# zawiera liczbę argumentów przekazanych do skryptu.
Używając skryptów powłoki, w szczególności napisanych przez kogoś innego, przydatne bywa zobaczenie co ten skrypt naprawdę robi. Najprostszym sposobem jest dodanie poniższej linijki na początek skryptu:
set -x
Dzięki temu każda komenda wykonywana przez skrypt będzie wyświetlania na ekranie! Przykład:
Cóź, używanie komendy find nie jest proste ;). Aby uzyskać ciekawsze efekty trzeba troszkę pokombinować. Postanowiłem więc wpisać na blogu prostą komendę „find”, która będzie użyta w moim następnym skrypcie a która w locie pozwala odpakować archiwa rar z hasłem: