Skocz do zawartości
Zaloguj się, aby obserwować  
Elber

Skrypt do pakowania, wysyłanie plików na ftp i usuwanie starych

Polecane posty

Witam, potrzebuje skrypt, który codziennie o 3 w nocy (ale to sobie dodam crona) będzie pakował foldery /home/virtual/*/backups/ tam gdzie * to są nazwy domen i dobrze by było aby każdy spakowany folder backups z folderu * miał taką nazwą jak * czyli np. mam /home/virtual/domena1.pl/backups/ i chce żeby zawartość backups spakowało jako aktualnadata.domena1.pl.tar.gz albo jakieś inne rozszerzenie może być i analogicznie jak mam potem /home/virtual/domena2.pl/backups/ żeby spakowało jako aktualnadata.domena2.pl.tar.gz (aktualnadata to data w formacie dd-mm-rrrr) i następnie te wszystkie pliki tar.gz wysłało mi na serwer FTP, i dobrze by było aby jeszcze z tego FTP usuwało pliki starsze niż 14 dni. Ma ktoś coś takiego, ewentualnie mógł by takie coś ktoś napisać ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam, potrzebuje skrypt, który codziennie o 3 w nocy (ale to sobie dodam crona) będzie pakował foldery /home/virtual/*/backups/ tam gdzie * to są nazwy domen i dobrze by było aby każdy spakowany folder backups z folderu * miał taką nazwą jak * czyli np. mam /home/virtual/domena1.pl/backups/ i chce żeby zawartość backups spakowało jako aktualnadata.domena1.pl.tar.gz albo jakieś inne rozszerzenie może być i analogicznie jak mam potem /home/virtual/domena2.pl/backups/ żeby spakowało jako aktualnadata.domena2.pl.tar.gz (aktualnadata to data w formacie dd-mm-rrrr) i następnie te wszystkie pliki tar.gz wysłało mi na serwer FTP, i dobrze by było aby jeszcze z tego FTP usuwało pliki starsze niż 14 dni. Ma ktoś coś takiego, ewentualnie mógł by takie coś ktoś napisać ?

Mam dzisiaj dobry dzień to ci napiszę

 

#!/bin/bash

KAT='/home/virtual'
ARCH='/var/tmp'
DZISIAJ=`date +%d-%m-%Y`
ZDALNY='user@192.168.1.20:/var/backups'


ls -1 $KAT |while read domena; do
       echo "archiwzowanie: $domena"
       ( cd $KAT/$domena/backups && tar czf ${ARCH}/${DZISIAJ}.${domena}.tar.gz . )
       scp ${ARCH}/${DZISIAJ}.${domena}.tar.gz ${ZDALNY}
done

 

Wysyłanie czegokolwiek przez FTP jest moim zdaniem przeżytkiem - nie dość że niebezpieczne bo hasła jawnym tekstem lecą, to jeszcze nie da się go sensownie oskryptować. Dlatego jest przez scp bo to jedna linijka. Musisz tylko wygenerować klucz użytkownika który będzie robił kopię:

ssh-keygen

I przesłać klucz: ~/.ssh/id_dsa.pub to katalogu .ssh zdalnego użytkownika na zdalnym serwerze - klucz musi tam nosić nazwę authorized_keys. Wtedy możesz się logować bez hasła, więc skrypt będzie śmigać. Usuwanie starszych plików pozostawiam ci w charakterze pracy domowej. ;)

 

A jak koniecznie musisz to przesyłać ftp-em to zainteresuj się czymś co się nazywa "expect".

http://pl.wikipedia.org/wiki/Expect

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam dzisiaj dobry dzień to ci napiszę

 

#!/bin/bash

KAT='/home/virtual'
ARCH='/var/tmp'
DZISIAJ=`date +%d-%m-%Y`
ZDALNY='user@192.168.1.20:/var/backups'


ls -1 $KAT |while read domena; do
echo "archiwzowanie: $domena"
( cd $KAT/$domena/backups && tar czf ${ARCH}/${DZISIAJ}.${domena}.tar.gz . )
scp ${ARCH}/${DZISIAJ}.${domena}.tar.gz ${ZDALNY}
done

 

Wysyłanie czegokolwiek przez FTP jest moim zdaniem przeżytkiem - nie dość że niebezpieczne bo hasła jawnym tekstem lecą, to jeszcze nie da się go sensownie oskryptować. Dlatego jest przez scp bo to jedna linijka. Musisz tylko wygenerować klucz użytkownika który będzie robił kopię:

ssh-keygen

I przesłać klucz: ~/.ssh/id_dsa.pub to katalogu .ssh zdalnego użytkownika na zdalnym serwerze - klucz musi tam nosić nazwę authorized_keys. Wtedy możesz się logować bez hasła, więc skrypt będzie śmigać. Usuwanie starszych plików pozostawiam ci w charakterze pracy domowej. ;)

 

A jak koniecznie musisz to przesyłać ftp-em to zainteresuj się czymś co się nazywa "expect".

http://pl.wikipedia.org/wiki/Expect

 

A jeśli to ftp to ftp backupowe do którego mama dostęp tylko za pomocą ftp z mojego serwera i login to nazwa serwera ? To jak mam skonfigurować klucz ssh ? bo jak tworze katalog .ssh na ftp i przesyłam tam plik to nic mi to nie daje :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ok dzięki :) poczytałem i działa pięknie :) Teraz mam pytanie, jak zrobić żeby od DZISIAJ=`date +%d-%m-%Y` odjęło mi 14 dni ?

 

#!/bin/bash

# timestamp dzisiejszy
TSNOW=`date -u +%s`
# timestamp dwa tygodnie temu (odejmujemy 14 dni, czyli 14 * 24 * 60 * 60 sekund)
let TSPAST=${TSNOW}-1209600

dzisiaj=`date -d @${TSNOW} +%d-%m-%Y`
dwatygodnietemu=`date -d @${TSPAST} +%d-%m-%Y`

echo -e "Dzisaj:\t\t\t$dzisiaj"
echo -e "Dwa tygodnie temu:\t$dwatygodnietemu"

 

A jeśli to ftp to ftp backupowe do którego mama dostęp tylko za pomocą ftp z mojego serwera i login to nazwa serwera ? To jak mam skonfigurować klucz ssh ?

 

A Google użyć to ci religia nie pozwala? :)

 

http://dug.net.pl/tekst/65/ssh___klucze_rsa_%28mozliwosc_logowania_bez_hasla%29/

http://www.pcworld.pl/news/116888/Logowanie.SSH.bez.hasla.html

http://mizerski.com/2009/logowanie-przez-ssh-bez-podawania-hasla/

http://perfectlinux.net/sshlog.php

Udostępnij ten post


Link to postu
Udostępnij na innych stronach


# timestamp dwa tygodnie temu (odejmujemy 14 dni, czyli 14 * 24 * 60 * 60 sekund)
let TSPAST=${TSNOW}-1209600

A nie prościej ?

 

date +%d-%m-%Y --date="14 days ago"

Domyślam się, że chodzi o tu backup w OVH. Tam jest tylko dostęp przez ftp i klucza ssh nie zainstalujesz.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A nie prościej ?

 

date +%d-%m-%Y --date="14 days ago"

Domyślam się, że chodzi o tu backup w OVH. Tam jest tylko dostęp przez ftp i klucza ssh nie zainstalujesz.

 

Hmm myślałem nad czymś tego typu

 

#!/bin/bash

STARE=`date +%d-%m-%Y --date="10 days ago"`
DELETE="$STARE.*"

ftp -n $HOST << EOF
user $USER $PASSWD
delete $DELETE
quit
EOF

ale mi wywala

Could not delete 14-11-2009.*: No such file or directory

 

mimo, że pliki z początkiem w nazwie 14-11-2009. są.

 

Źle kombinuje ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Hmm myślałem nad czymś tego typu

 

#!/bin/bash

STARE=`date +%d-%m-%Y --date="10 days ago"`
DELETE="$STARE.*"

ftp -n $HOST << EOF
user $USER $PASSWD
delete $DELETE
quit
EOF

ale mi wywala

Could not delete 14-11-2009.*: No such file or directory

 

mimo, że pliki z początkiem w nazwie 14-11-2009. są.

 

Źle kombinuje ?

 

Prawie dobrze

prompt
mdelete $DELETE

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Działa ;) Dzięki :)

A jest coś typu ncftp że pozwoli mi takie coś napisać w 1 linijce ?? :)

A po co?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sam nie wiem. Teraz mój skrypt wygląda tak:

#!/bin/bash

KAT='/home/virtual'
ARCH='/var/tmp'
DZISIAJ=`date +%d-%m-%Y`
STARE=`date +%d-%m-%Y --date="10 days ago"`
DELETE="$STARE.*"
HOST='host'
USER='login'
PASSWD='hasło'

ls -1 $KAT |while read domena; do
	echo "Archiwzowanie: $domena"
	( cd $KAT/$domena/backups && tar czf ${ARCH}/${DZISIAJ}.${domena}.tar.gz . )
	ncftpput -u $USER -p $PASSWD -a $HOST / ${ARCH}/${DZISIAJ}.${domena}.tar.gz
	rm ${ARCH}/${DZISIAJ}.${domena}.tar.gz
done

ftp -n $HOST << EOF
user $USER $PASSWD
prompt
mdelete $DELETE
quit
EOF

 

Jest tutaj coś źle napisane albo coś poprawić ? ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×