Timeout na nieprzewidziane sytuacje

Data publikacji: 2014-03-06 | Tagi:

Ostatnio jeden z moich serwerów linuksowych z jakiegoś powodu tracił połączenie z podłączonymi dyskami innego serwera (opartego na windows). Przez to wiele rzeczy szło źle, usługi przestawały działać, a load szybował do 5-7 na jednoprocesorowej maszynie.

Jako, że nie mam wpływu na maszynę z Windows, a na serwerze linuxowym ciężko dopatrzeć się błędu w konfiguracji, postanowiłem obejść problem inaczej, stosując bardzo brudny trick.

Zauważyłem, że w takiej awaryjnej sytuacji nie mogę wejść do katalogu z podmontowanym zasobem Windows, a polecenie cd trwa bardzo długo, zanim zwróci błąd. Zaczął się rodzić w mojej głowie taki skrypt:

#!/bin/sh

TIMEOUT="10s"

timeout $TIMEOUT touch /mnt/udzial_windows/
RESULT=$?

if [ $RESULT != "0" ]; then
    /sbin/shutdown -r now
fi

Przy użyciu polecenia timeout każę dotknąć linuxowi systemu plików Windows. Jeśli po 10 sekundach nie uda się to, polecenie touch jest zabijane przez komendę timeout i zwracany jest kod błędu.

Jeśli kod błędu będzie inny niż 0 (niepowodzenie), następuje restart i wszystko wraca do normy.

Wprawdzie nie jestem fanem tego typu rozwiązań, to czasami stanowią one rozsądny kompromis - po co spędzać dziesiątki godzin na szukaniu usterki, skoro można ją obejść bez większych skutków ubocznych w 5 minut?

Należy jednak uważać, żeby takie rozwiązanie nie doprowadziło do sytuacji opisanej w tym artykule.


Oceń ten post:
Podziel się:

comments powered by Disqus

IT w obrazkach: