Portál AbcLinuxu, 10. listopadu 2025 15:08
#!/usr/bin/env bash
#####################
# zalohovaci skript #
# (viz. nazev) #
#####################
# promenne
CIL="/home/zaloha"
ZDROJ="/mnt/root-ss/etc"
PREFIX="etc_"
POSTFIX="`date +%d%m%y`.tar.bz2"
NAZEV=${PREFIX}${POSTFIX}
echo "vytvářím snapshot /"
/etc/init.d/snapshot-root start >/dev/null &&
echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&
echo "odpojuji snapshot /"
/etc/init.d/snapshot-root stop >/dev/null &&
echo "upravuji práva souboru zálohy"
find ${CIL} -name "${PREFIX}*" -print0 | xargs -0 chmod 640 &&
echo "hledám a mažu zálohy starší 3 dny"
find ${CIL} -name "${PREFIX}*" -mtime +2 -print0 | xargs -0 rm -f &&
echo "připojuji DVD-RAM"
mount /media/dvd-ram &&
echo "synchronizuji zálohy s DVD-RAM"
rsync -av --delete ${CIL}/ /media/dvd-ram/ >> /dev/null &&
echo "odpojuji DVD-RAM"
umount /media/dvd-ram
echo "zasílám informační e-mail a zapisuji stav do logu"
if [[ `echo $?` -eq 0 ]]; then
echo -e "`date` Zaloha "$ZDROJ" byla provedena." >>/var/log/zaloha.log
else
echo -e "`date` Zaloha "$ZDROJ" SKONCILA CHYBOU!" >> /var/log/zaloha.log
mail -s "zaloha "$ZDROJ"" example@example.net <<-MESSAGE
Dobry den,
Zaloha "$ZDROJ" NEBYLA PROVEDENA v `date +%H:%M` `date +%d.%m.%Y`.
Vas zalozni server :(
MESSAGE
fi
echo "HOTOVO!"
pokud dam spusteni do cronu, tak mi to napise toto:
/etc/init.d/snapshot-root: line 12: lvcreate: command not found umount: /mnt/root-ss: not foundJak je to mozne? Myslel jsem, ze cron to spusti naprosto stejne, jak ja rucne.
lvcreate ?
Jeste bych se rad zeptal, ted mam skriptik upraveny takto:
#!/usr/bin/env bash
# promenne
CIL="/home/zaloha"
ZDROJ="/mnt/root-ss/etc"
PREFIX="etc_"
POSTFIX="`date +%d%m%y`.tar.bz2"
NAZEV=${PREFIX}${POSTFIX}
echo "vytvářím snapshot /"
/etc/init.d/snapshot-root start &&
echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&
echo "odpojuji snapshot /"
/etc/init.d/snapshot-root stop &&
echo "upravuji práva souboru zálohy"
find ${CIL} -name "${PREFIX}*" -print0 | xargs -0 chmod 640 &&
echo "hledám a mažu zálohy starší 3 dny"
find ${CIL} -name "${PREFIX}*" -mtime +2 -print0 | xargs -0 rm -f &&
echo "připojuji DVD-RAM"
mount /media/dvd-ram &&
echo "synchronizuji zálohy s DVD-RAM"
rsync -av --delete ${CIL}/ /media/dvd-ram/ &&
echo "odpojuji DVD-RAM"
umount /media/dvd-ram
echo "záloha $ZDROJ byla úspěšně provedena" >>/var/log/zaloha.log
Potrebuju nejak osetrit to, aby se mi posledni radek zapsal do logu pouze tehdy, kdyz je vse opravdu OK. A pokud bude chyba, chtel bych, aby se zapsal do logu ta chybova hlaska (treba s nejakou omackou, ze zaloha nebyla provedena z duvodu...). Diky
myexit(){
# logger -p error "Neco stojí za prd. Message: $1"
# echo " ERROR !!! Message: $1" | /usr/bin/mailx \
# -s "Nejaky muj predmet" -r pepastroj@moje.kubrt pepa@moje.kubrt
echo "Error: $1"
exit $2
}
a pokaždém příkazu (mimo echo :)) otestoval (nebo příkaz můžete dát přímo do podmínky)
if [ $? != 0 ]; then myexit "Error: tento příkaz nefunguje" 3 fiza předpokladu že si dáte ty && pryč (proč tam jsou?)
2>/dev/null bych asi vyměnil za 2>>/var/log/zaloha_tar_err.log - pomůže to při analýze případného problému.
>> ..tak bych si asi napsal fci..
Ta funkce se pise nekam na zacatek toho scriptu?
Jinak v tom mailu bude primo i ta chybova hlaska nebo ne?
>> a to 2>/dev/null bych asi vyměnil za 2>>/var/log/zaloha_tar_err.log - pomůže to při analýze případného problému.
Presmeroval jsem do /dev/null i chybovy vypis z tar, protoze mi to porad posilalo i tu hlasku s tim lomitkem..ted si ji nevybavim, ale tar to ma v oblibe
Invalid argument 14,994G Error during parsing of command line. umount: /mnt/home-ss: not foundtady je script na snapshot:
#!/bin/sh
zarizeni="/dev/LVM-sda2-sdb2/home"; # LVM logický oddíl
pripojny_bod="/mnt/home-ss"; # Adresář, kam vytvořený obraz připojíme
velikost_obrazu="14,994G"; # tolik změn lze na disku udělat, než se snapshot zaplní na 100%
nazev_obrazu="home-ss"; # Název LVM obrazu
nazev_vg="LVM-sda2-sdb2"; # LVM skupina svazků (VG)
case "$1" in
start)
echo "Vytvářím obraz disku";
/sbin/lvcreate -s -L ${velikost_obrazu} -n ${nazev_obrazu} ${zarizeni} &&
mkdir ${pripojny_bod} &&
mount /dev/${nazev_vg}/${nazev_obrazu} ${pripojny_bod};
;;
restart)
$0 stop
$0 start
;;
stop)
echo "Ruším obraz disku";
umount ${pripojny_bod} &&
/sbin/lvremove -f /dev/${nazev_vg}/${nazev_obrazu} &&
rmdir ${pripojny_bod} ;
;;
*)
echo "Použijte jeden z těchto parametrů: $0 {start|stop|restart}"
exit 3
;;
esac
PS: A taky je spatne, ze prestoze se snapshot nevytvoril, script jede dal a tim padem nic nevyzalohuje a jeste smaze stare funkcni zalohy. Asi to bude potreba cele prepracovat, ze jo
velikost_obrazu="14,994G", nebylo by správnější velikost_obrazu="14G" ? mkdir a mount spojujete && tak se neprovedou, bo první neskočil s návratovým kódem '0', takže je logické že není co odmontovat – poslední hlášení
…mount /dev/${nazev_vg}/${nazev_obrazu} ${pripojny_bod} && exit 0;
exit 3
a
…rmdir ${pripojny_bod} && exit 0;
exit 3
Tak se vám ze sciptu dostane návratový kód (o restartu se fčul nebavě).
/etc/init.d/snapshot-root start &&
echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&
Toto prakticky znamená, že pokud se neprovede vytvoření snapshotu, nevypíše se to „echo“, ale další příkaz normálně pokračuje.
…
echo "vytvářím snapshot"
/etc/init.d/snapshot-root start
if [ $? != 0 ]; then
echo "Snapshot stávkuje"
exit 3
fi
echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null
if [ $? != 0 ]; then
echo "Tar má na háku a proc, to nevis, bo je to v /dev/null"
exit 3
fi
…
&& jsem dal pryc z toho "zalohovaciho skriptu".
tar zklamat s různých důvodů, a pokud nebudete mít někde výpis, tak nebudete vědět proč, a nějaký log navíc s pár bajtama už nikoho nezabije :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.