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/.
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_BACKUP
4. 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
wrzuc do crona :) raz na dzien
Offline
A jak CRON wykona punkt 5? :)
Offline
30 sekund w guglu
https://www.linuxquestions.org/questions/linux-networking-3/remote-command-execute-telnet-with-1-command-338670/
also robienie tego po telnecie to średni pomysł, lepiej ssh na kluczach
Offline
[quote=pimowo]A jak CRON wykona punkt 5? :)[/quote]
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-run-command-on-telnet-command-prompt-in-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
Niestety ale nie ma SSH (może ja nie potrafię tego uruchomić)
Offline
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_adres
Sprawdzić czy czas jest wystarczający, można dać więcej sekund.
Ostatnio edytowany przez jawojx (2017-10-29 19:45:39)
Offline
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 5
i 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
To teraz pytanie... jak to wszystko złożyć w jedną wielką, działającą całość? :)[/quote]
Tak:Kod:
#!/bin/bash pierwszy(){ } dugi(){ } # kolejność jaka jest potrzebna (pierwszy) (drugi)lub tak
Kod:
#!/bin/bash /gdzie/pierwszy #jak jest w np. /usr/bin/ drugi
Offline
@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
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ść? :)[/quote]
Ostatnio edytowany przez jawojx (2017-10-29 21:24:39)
Offline
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_stop
Proszę się nie śmiać bo jaki programista taki skrypt, ale wygląda na to, że to działa :P
Offline
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00095 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.29.213' WHERE u.id=1 |
0.00073 | UPDATE punbb_online SET logged=1732694418 WHERE ident='3.144.29.213' |
0.00043 | SELECT * FROM punbb_online WHERE logged<1732694118 |
0.00052 | SELECT topic_id FROM punbb_posts WHERE id=315099 |
0.00065 | SELECT id FROM punbb_posts WHERE topic_id=30009 ORDER BY posted |
0.00053 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30009 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00085 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30009 ORDER BY p.id LIMIT 0,25 |
0.00087 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30009 |
Total query time: 0.00575 s |