Nadejdą ciepłe sierpnie
A poranna poczta poinformuje, że skrypt wywołany przez cron
skasował wszystkie tegoroczne snapshoty systemów plików. Zamiast usunąc tylke te starsze niż kwartał.
Fatalny skutek spowodowany był dwiema okolicznościami:
- solarisowy
date
jest bardzo prosty, nie obsługuje podawania daty wyrażeniami typu"4 months ago"
, przez co trzeba stosować shellową arytmetykę; - powłoka traktuje liczby poprzedzone zerem jako zapisane w formacie ósemkowym
date +%m
zwróciło 08
.
Przy dalszych operacjach shell zaprotestował, że nie jest to poprawna liczba ósemkowa i nie wykonał
odejmowania i przypisania. Skrypt wykonał się dalej, ale z listy snapshotów nie wyciągnął
tych zawierających człon 2007-04
(wykonanych w kwietniu). Usunięte zostały
snapy pasujące do 2007-
, czyli wszystkie. zfs destroy
wykonało
się radośnie po 120 razy na każdym nadzorowanym systemie plików.
Poprawka skryptu jest polega na poinformowaniu powłoki, że ma do czynienia z liczbą w zapisie dziesiętnym:
-MONTH=$(printf "%02d" $((MONTH - 4)))
+MONTH=$(printf "%02d" $((10#${MONTH} - 4)))
I wydaje się działać. Tak jak pół roku temu wydawało się :). Zaraz chyba zabiorę się za napisanie
test suite do tego skryptu.
Swoją drogą akcja opowiadania Raya Bradburego, z którego zaczerpnąłem tytuł, toczy się również na początku sierpnia. Feralny miesiąc?
Archived comments:
mwi 2007-08-01 13:27:59
Dobry motyw, nie powiem. :P Ja bym od razu mu urwał to feralne 0:
MONTH=${MONTH#0}
zdz 2007-08-01 13:33:39
O, dobry patent, dzięki.
Piotr Hosowicz 2007-08-01 16:48:37
Ooops ... To coś jak moje :
# killall jakis-program
... wykonane na AIXie. Na szczęście na serwerze developerskim :-D Pod Solarisem skutek byłby zdaje się podobny jak pod AIXem, nie próbowałem.
Stanisław 'dozzie' Klekot 2007-08-01 19:38:19
A to ci psikus z tym date. A wystarczyło `set -e' na początku skryptu...
Comments
Comments powered by Disqus