Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Użytkownik

Hej,
Do tej pory miałem w domu serwer plików Zyxel NSA310S, ale zrobiłem sobie serwer na PC + Debian 9 Stretch.
Wszystko działa tak:
- serwer działa 24h, a na nim przeróżne pierdoły
- codziennie robię backup dwóch Raspberry na serwer
- serwer służy jako NAS
Tu jest wszystko OK
Teraz chcę zrobić sobie backup tego serwera na Zyxel (leży odłogiem to niech coś ciekawego robi)
Próbuję zrobić automat do backupu, ale nie wiem jak to ogarnąć.
Dokładnie to chciałbym uzyskać:
- Serwer PC budzi Zyxela (raz na dobę np w nocy)
- Serwer PC montuje udostępnione zasoby NFS przez Zyxel
- Serwer PC robi backup
- Serwer PC odmontowuje zasoby
- Serwer PC wysyła komendę do zamknięcia systemu w Zyxel
Co mam:
1. Budzenie Zyxela przez WakeOnLan z Serwer PC
wakeonlan xx:xx:xx:xx:xx:xx
2. Montowanie zasobów
mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup
3. Wykonanie skryptu "backup" (skrypt znaleziony kiedyś, gdzieś w sieci i działa wyśmienicie)
#!/bin/bash
# Katalog Docelowy (bez ostatniego /)
BACKUP_DIR=/mnt/backup
# Katalog źródłowy
SOURCE_DIR_1=/coś_tam_1
SOURCE_DIR_2=/coś_tam_2
SOURCE_DIR_3=/coś_tam_3
SOURCE_DIR_4=/coś_tam_4
SOURCE_DIR_1=/coś_tam_5
# Ilość przechowywanych kopii (1 kopia dziennie)
NUM_BACKUP=7
# Jeżeli nie ma katalogu dla kopii to go tworzymy
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi
# Wywalamy najstarszy backup
OLDEST_BACKUP=$(date -I -d "$NUM_BACKUP day ago")
if [ -n "$OLDEST_BACKUP" ]; then
if [ -d $BACKUP_DIR/$OLDEST_BACKUP ]; then
rm -r $BACKUP_DIR/$OLDEST_BACKUP
fi
fi
# Pobieramy ostatni katalog backupu
LAST_BACKUP=$(date -I -d "1 day ago")
CURRENT_BACKUP=$(date -I)
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_1 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_2 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_3 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_4 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_5 $BACKUP_DIR/$CURRENT_BACKUP4. Odmontowanie zasobów
umount /mnt/backup
5. Zamknięcie systemu Zyxel:
- łączę się poprzez telnet
telnet 192.168.1.3
- loguję się jako root
- wydaję polecenie "poweroff"
Ręcznie wszystko to działa, ale jak z tego zrobić teraz automat? :)
Z góry dziękuję i pozdrawiam.
Piotrek
Offline

Członek DUG


wrzuc do crona :) raz na dzien
Offline
Użytkownik

A jak CRON wykona punkt 5? :)
Offline



Dzban Naczelny
30 sekund w guglu
https://www.linuxquestions.org/questions/linux-netw … mmand-338670/
also robienie tego po telnecie to średni pomysł, lepiej ssh na kluczach

Offline







Podobno człowiek...;)








pimowo napisał(-a):
A jak CRON wykona punkt 5? :)
Na tym Zyxelu jest SSH? - byłoby prościej.
Jeśli przez telnet, to tu masz conieco w przedmiocie możliwości z wykorzystaniem perla, albo expect:
https://stackoverflow.com/questions/15832015/how-to … n-perl-script
Jednak taka zabawa jest X razy trudniejsza, niż przy SSH z autoryzacją kluczami.
Ostatnio edytowany przez Jacekalex (2017-10-29 18:27:52)
Offline
Użytkownik

Niestety ale nie ma SSH (może ja nie potrafię tego uruchomić)
Offline


Użytkownik



To jest przez telnet jak nie ma bezpośrednio na root-a, jak masz ustawione na roota-a to chyba wiadomo co zmienić.
#!/bin/bash
{
sleep 3
echo nazwa_usera
sleep 3
echo hasło_usera
sleep 3
echo su
sleep 3
echo hasło_roota
sleep 3
echo poweroff
sleep 10
} | telnet IP_adresSprawdzić czy czas jest wystarczający, można dać więcej sekund.
Ostatnio edytowany przez jawojx (2017-10-29 19:45:39)
Offline
Użytkownik

Zrobiłem dwa skrypty, wyglądają tak:
/zyxel_start
#!/bin/bash wakeonlan XX:XX:XX:XX:XX:XX
zyxel_stop
#!/usr/bin/expect
spawn telnet 192.168.1.3
expect {*NSA310S login:}
send "root\r"
expect {*Password:}
send "ABCD\r"
expect {*~ #}
send "poweroff\r"
sleep 5i wszystko działa :)
To teraz pytanie... jak to wszystko złożyć w jedną wielką, działającą całość? :)
Ostatnio edytowany przez pimowo (2017-10-29 19:50:48)
Offline


Użytkownik



To teraz pytanie... jak to wszystko złożyć w jedną wielką, działającą całość? :)
Tak:
#!/bin/bash
pierwszy(){
}
dugi(){
}
# kolejność jaka jest potrzebna
(pierwszy)
(drugi)lub tak
#!/bin/bash /gdzie/pierwszy #jak jest w np. /usr/bin/ drugi
Offline
Użytkownik

@jawojx nie bardzo rozumiem co masz na myśli...
Nie wiem czy mam to wszystko zrobić jako jeden skrypt czy uruchamiać je po kolei.
1. uruchamiam Zyxela
/skrypty/zyxel_start
2. montuje zasoby
mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup
3. robię backup
/skrypty/backup
4. odmontowuje zasoby
umount /mnt/backup
5. wyłączamm Zyxela
/skrypty/zyxel_stop
Potrzebne są jakieś opóźnienia bo Zyxel chwilę się uruchamia lub w jakiś sposób trzeba sprawdzić, że on jest gotowy.
Offline


Użytkownik



No możesz wszystko z osobna podawać w cron-ie, ale łatwiej to zrobić w jednym pliku, chyba. I o tym to było, by zapisać jako jeden skrypt. Myślałem że o to pytałeś.
To teraz pytanie... jak to wszystko złożyć w jedną wielką, działającą całość? :)
Ostatnio edytowany przez jawojx (2017-10-29 21:24:39)
Offline
Użytkownik

OK, zrobiłem coś takiego:
#!/bin/bash
# Włączenie zdalnego serwera
wakeonlan XX:XX:XX:XX:XX:XX
# Odczekaj chwile aby zdalny serwer mógłby się uruchomić
sleep 60
# Montujemy zasoby zdalnego serwera
mount 192.168.1.3:/i-data/dbaffb69/nfs/NFS /mnt/backup
# Katalog docelowy (bez ostatniego /)
BACKUP_DIR=/mnt/backup
# Katalog źródłowy
SOURCE_DIR_1=/coś_tam_1
SOURCE_DIR_2=/coś_tam_2
SOURCE_DIR_3=/coś_tam_3
SOURCE_DIR_4=/coś_tam_4
SOURCE_DIR_1=/coś_tam_5
# Ilość przechowywanych kopii (1 kopia dziennie)
NUM_BACKUP=7
# Jeżeli nie ma katalogu dla kopii to go tworzymy
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi
# Wywalamy najstarszy backup
OLDEST_BACKUP=$(date -I -d "$NUM_BACKUP day ago")
if [ -n "$OLDEST_BACKUP" ]; then
if [ -d $BACKUP_DIR/$OLDEST_BACKUP ]; then
rm -r $BACKUP_DIR/$OLDEST_BACKUP
fi
fi
# Pobieramy ostatni katalog backupu
LAST_BACKUP=$(date -I -d "1 day ago")
CURRENT_BACKUP=$(date -I)
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_1 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_2 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_3 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_4 $BACKUP_DIR/$CURRENT_BACKUP &&
rsync -avh --progress --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR_5 $BACKUP_DIR/$CURRENT_BACKUP
# Wszystko zrobione, wiec należy odmontować zasoby zdalnego serwera
umount /mnt/backup
# Potwierdzenie wykonania backupu na konsole
echo "Backup wykonany, pa :)"
# Wyłączenie zdalnego serwera
/skrypty/zyxel_stopProszę się nie śmiać bo jaki programista taki skrypt, ale wygląda na to, że to działa :P
Offline