Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Tha-Fox - 19.04.10 - klo:14.02

Otsikko: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 19.04.10 - klo:14.02
Sain viimein palvelimen, johon pystyisin tekemään verkon yli varmuuskopioni, jos vain osaisin.

Minulla on nyt siis läppäri, josta haluan tehdä varmuuskopiot toiselle läppärille, joka on puoli-yleisessä käytössä. Aluksi meinasin tehdä salatun tar-pallon bz2:lla pakattuna, mutta tulin siihen tulokseen, että tällöin en ilmeisesti pystyisi hyödyntämään rsyncin incrementaaleja. Niinpä arvelin, että otan kaikki /homen ulkopuoliset (käytännössä /etc, tietokannan dumppi ja pari muuta yksittäistä tiedostoa) erilliseen backup-kansioon /homen alle. Tämän jälkeen koko /home rsynkataan etäpalvelimelle. Luotan tässä siihen, että siellä päässä kukaan ei ole kiinnostunut tiedostoistani, mikä on melko varmaa käyttäjäkunta tuntien.

Vastapäässä on käyttäjätili ja olen luonut avainparin SSH-yhteyttä varten ja se toimii mallikkaasti. SSH-palvelin pyörii yläportissa käytännön pakosta. Ongelma tällä hetkellä on, että saan virhettä kokeillessani synkkausta rsyncin dry-run -parametrilla. Käytän tällaista backup-skriptiä, jonka pitäisi hoitaa rotaatiota 7 päivän ajalta (huom! BDIR ei kata nyt siis juuri mitään, testausvaiheen takia):

Koodia: [Valitse]
#!/bin/sh

# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com

# directory to backup
BDIR=/home/käyttäjä/backup

# excludes file - this contains a wildcard pattern per line of files to exclude
# EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=varmistuspalvelimen_ip-osoite

# your password on the backup server
# export RSYNC_PASSWORD=XXXXXX


########################################################################

BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
      --delete --backup --backup-dir=/$BACKUPDIR -a"

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync -e 'ssh -ssh-käyttäjä -pyläportti' --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydirq

# now the actual transfer
rsync -v -n $OPTS -e 'ssh -pyläportti' $BDIR käyttäjä@varmistuspalvelimen_ip-osoite:/current

Ja kun tämän ajaa, virhe on seuraava:

Koodia: [Valitse]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.5]
rmdir: ”/home/käyttäjä/emptydirq”:n poisto epäonnistui: Tiedostoa tai hakemistoa ei ole
sending incremental file list
created directory /current
backup/
backup/IfolorJavaUpload.data

sent 92 bytes  received 19 bytes  74.00 bytes/sec
total size is 228  speedup is 2.05 (DRY RUN)


En ole vielä ilman tuota dry-runia kokeillut, tapahtuuko mitään. Mutta käsittääkseni ssh-yhteys syntyy, mutta nuo kaksi ensimmäistä error-riviä estävät toiminnan. IfolorJavaUpload.data on tuolla testitiedostona backup-kansiossa.

Sen verran vielä taustatietoa, että varmuuskopioitavassa päässä on käytössä Jaunty ja varmuuskopiopalvelimessa pyörii Karmic. Vastapäähän ei ole asennettu mitään muuta kuin openssh-palvelin. Voisiko esim. rsyncin versioiden eroavuus aiheuttaa tuon virheen? Näköjään versiot ovat 3.05 Jauntyssa ja 3.06 Karmicissa.

Onko rsync ylipäätään järkevin ratkaisu tuohon vai kannattaisiko käyttää rdiff-backuppia (http://www.nongnu.org/rdiff-backup/) tai rsnapshottia (http://rsnapshot.org/)? En ole noihin tutustunut, mutta mainoslauseiden mukaan tuntuisivat tekevän asioita helpommin. Varsinkin rsnapshotissa vaikuttaisi olevan tuo yhden fullin ja parin lisäävän varmuuskopion pyörittäminen valmiina ohjelmassa ilman tarvetta omiin skripteihin.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 20.04.10 - klo:14.38
Näyttää vähän siltä, että jotain ongelmaa on tuossa skriptissä. Kokeilin seuraavaa komentoa ja se toimi nätisti:

Koodia: [Valitse]
rsync -avz -n -e "ssh -l ssh-käyttäjä -p yläportti" /oma_paikallinen_kansio rsync-käyttäjä@osoite:/polku/etäkoneella

Kokeilin myös ilman dry-run -parametria ja testitiedosto ilmestyi palvelimelle. Muutenhan tuo kometo olisi itsessään täydellinen, mutta rotaatiota se ei vielä tuo noihin varmuuskopioihin.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 22.04.10 - klo:00.47
Vähän lisää googlettelua ja nyt on vaihtunut skripti täältä (http://www.linux.com/archive/articles/113847) löydettyyn. Tuntui itselle ymmärrettävämmältä ensimmäiseen verrattuna. Lisäilin tuohon hieman optioita porttia varten ja tietysti polut säilytin ennallaan. Muuten tuo tuntuu toimivan oikein, mutta se ei tottele Exclude-kohdassa määriteltyä tiedostoa. Olen laittanut sinne yhden kansion, johon ajattelin tunkea kaikki isot binäärimöykyt. Tästä huolimatta testeissä ohjelma käy tuon kansion läpi. Osaisiko joku sanoa, mistä tämä voisi johtua? Tiedoston sijainti on määritelty absoluuttisella polulla, typot tarkistettu ja kansio on koetettu antaa kauttaviiva perässä sekä ilman.

Edit: Meinasi näin illan hämyssä unohtua toinen ongelma. Tuolla rotaatiota hoitavassa koodissa on tämä kohta:
Koodia: [Valitse]
for backup in `ssh -i $RKEY $RUSER@$RMACHINE "ls -dXr $RTARGET/*/"`; do
if [ $BACKUP_NUMBER -eq 1 ]; then
NEWEST_BACKUP="$backup"
fi

if [ $BACKUP_NUMBER -eq $ROTATIONS ]; then
OLDEST_BACKUP="$backup"
break
fi

let "BACKUP_NUMBER=$BACKUP_NUMBER+1"

Tämä viimeinen let-komento antaa minulle ilmoitusta, ettei tuollaista komentoa ole. Pitäisikö tuota ajaa eri shellissä vai mistä mahtaa olla kyse? Olettaisin, että jos tuo kohta ei toimi, varmuuskopiot eivät kierrä oikein.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 22.04.10 - klo:16.42
---
Edit: Meinasi näin illan hämyssä unohtua toinen ongelma. Tuolla rotaatiota hoitavassa koodissa on tämä kohta:
Koodia: [Valitse]
for backup in `ssh -i $RKEY $RUSER@$RMACHINE "ls -dXr $RTARGET/*/"`; do
if [ $BACKUP_NUMBER -eq 1 ]; then
NEWEST_BACKUP="$backup"
fi

if [ $BACKUP_NUMBER -eq $ROTATIONS ]; then
OLDEST_BACKUP="$backup"
break
fi

let "BACKUP_NUMBER=$BACKUP_NUMBER+1"

Tämä viimeinen let-komento antaa minulle ilmoitusta, ettei tuollaista komentoa ole. Pitäisikö tuota ajaa eri shellissä vai mistä mahtaa olla kyse? Olettaisin, että jos tuo kohta ei toimi, varmuuskopiot eivät kierrä oikein.

Mitäs vastaa jos koetat komentorivillä tuota viimeistä loitsua?
(Minulla palautti kiltisti ykkösen kuten odotettua)
Tietysti kannattaa kokeilla ajaa se bashissa, #!/bin/sh -> #!/bin/bash
Jos vaikka sinun(kin) /bin/sh on linkattu johonkin toiseen shelliin kuin /bin/bash

Minulla näkyy olevan:
 file /bin/sh
/bin/sh: symbolic link to `dash'
Ja siinä tuota let -komentoa ei ole.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 22.04.10 - klo:21.28

Minulla näkyy olevan:
 file /bin/sh
/bin/sh: symbolic link to `dash'
Ja siinä tuota let -komentoa ei ole.


Sama täällä. Vähän ihmettelinkin tuota shebangia alussa, että miksi se ei ole bashissa. En kuitenkaan uskaltanut muuttaa sitä, kun en eri shellien ominaisuuksista niin paljoa tiedä. Pitääpä testata tuota skriptiä bashissa ja katsoa, mitä sieltä tulee. Testausta vain hidastaa se, että kone vaihtaa ip:tä pari kertaa päivässä, eikä dy.fi meinaa pysyä perässä, kun ei ihan tunneittain viitsisi päivitellä osoitettaan  :P

Edit: Tuo pelkkä let-rivi ei minulla palauttanut muuten mitään, meni vain läpi.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tomin - 22.04.10 - klo:22.20
Testausta vain hidastaa se, että kone vaihtaa ip:tä pari kertaa päivässä, eikä dy.fi meinaa pysyä perässä, kun ei ihan tunneittain viitsisi päivitellä osoitettaan  :P
Entä jos tarkistaisi onko se IP-muuttunut ja sen mukaan päivittäisi?
Tuolla ohjetta on alkuun pääsemiseksi (vaatii kuitenkin taitoa kirjoittaa sopiva scripti):
http://www.cyberciti.biz/tips/read-unixlinux-system-ip-address-in-a-shell-script.html
Eli hakemalla http://whatismyip.org/ saa tuon IP:n selville ja joku olikin ehdottanut siihen komentoa lynx --dump http://whatismyip.org/ mutta yhtälailla voit käyttää komentoa links -dump http://whatismyip.org/ joka vain antaa ylimääräisiä välejä. Tuo sitten pitäisi olla tallessa jossain tiedostossa johon sitä verrattaisiin ja sitten päivitettäisiin tuo jos tiedoston sisältö on jotain muuta ja sitten muutettaisiin sitä tiedostoa. Voisin oikeastaan kirjoittaa tuon huomenna omaksi ilokseni (ja upata tänne). :) Luultavasti tuollainen löytyisi myös Googlella.

Muokkaus: Tai sitten wget -qO - http://whatismyip.org/
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 22.04.10 - klo:22.28
Kävi mielessä tuo muuttaminen vain tarvittaessa, mutta oma taito ei riitä tuollaisen skriptin kirjoittamiseen. Voisi kyllä jotain yrittää väkerrellä ja verrata sun tuotokseen. Saan tuonne palvelimelle asenneltua ohjelmia, jos lynxiä sun muita tarttee.

Edit: Näyttäis paketti nimeltä ez-ipupdate aika viisaalta ratkaisulta, jos tuon saa vain toimimaan dy.fi:n kanssa. Toinen vaihtoehto olisi ilmeisesti ddclient, joka sekin tarkistaa ensin, onko ip muuttunut. Ja näköjään dy.fi tarjoaa osoitteen http://checkip.dy.fi tarkistamista varten.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tomin - 22.04.10 - klo:22.42
Kävi mielessä tuo muuttaminen vain tarvittaessa, mutta oma taito ei riitä tuollaisen skriptin kirjoittamiseen. Voisi kyllä jotain yrittää väkerrellä ja verrata sun tuotokseen. Saan tuonne palvelimelle asenneltua ohjelmia, jos lynxiä sun muita tarttee.
Wget näkyy riittävän. En ole itsekään kovin kokenut tuossa bashissa, mutta kokeilen kunhan joudan eli varmaankin huomenna.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 23.04.10 - klo:07.28

Minulla näkyy olevan:
 file /bin/sh
/bin/sh: symbolic link to `dash'
Ja siinä tuota let -komentoa ei ole.


Sama täällä. Vähän ihmettelinkin tuota shebangia alussa, että miksi se ei ole bashissa. En kuitenkaan uskaltanut muuttaa sitä, kun en eri shellien ominaisuuksista niin paljoa tiedä. Pitääpä testata tuota skriptiä bashissa ja katsoa, mitä sieltä tulee. Testausta vain hidastaa se, että kone vaihtaa ip:tä pari kertaa päivässä, eikä dy.fi meinaa pysyä perässä, kun ei ihan tunneittain viitsisi päivitellä osoitettaan  :P

Edit: Tuo pelkkä let-rivi ei minulla palauttanut muuten mitään, meni vain läpi.

Oletko varma? Siis katsoitko mitä ilmestyi muuttujaan
$BACKUP_NUMBER
Ja vaihtuiko sen arvo kun toistit ko. rivin ;)
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 23.04.10 - klo:08.57

Minulla näkyy olevan:
 file /bin/sh
/bin/sh: symbolic link to `dash'
Ja siinä tuota let -komentoa ei ole.


Sama täällä. Vähän ihmettelinkin tuota shebangia alussa, että miksi se ei ole bashissa. En kuitenkaan uskaltanut muuttaa sitä, kun en eri shellien ominaisuuksista niin paljoa tiedä. Pitääpä testata tuota skriptiä bashissa ja katsoa, mitä sieltä tulee. Testausta vain hidastaa se, että kone vaihtaa ip:tä pari kertaa päivässä, eikä dy.fi meinaa pysyä perässä, kun ei ihan tunneittain viitsisi päivitellä osoitettaan  :P

Edit: Tuo pelkkä let-rivi ei minulla palauttanut muuten mitään, meni vain läpi.

Oletko varma? Siis katsoitko mitä ilmestyi muuttujaan
$BACKUP_NUMBER
Ja vaihtuiko sen arvo kun toistit ko. rivin ;)


Oon taas niin... Näinhän se totta kai meni :D Ihmettelinkin, että mihin se oikein tallentaa tuota muuttujan arvoa.

Nyt pääsee taas fyysisesti palvelimelle, joten voi pistää dy.fi-osoitteen osoittamaan oikeaan paikkana ja viilailemaan skriptiä.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tomin - 23.04.10 - klo:19.08
Tässäpä tämä dy.fi:n päivittäjä. Lisää käyttäjänimi, salasana* ja dy.fi osoite ja aja cronilla (sekä tarvittaessa vaihda temppitiedosto (esimerkiksi useita IP:itä päivitettävänä). Tarkistaa päivän, jos se on vaihtunut päivittää IP:n, sekä IP:n, jos se on muuttunut niin päivittää.
Tuota saa kyllä jakaa eteenpäin ja muokata, kunhan pitää koodin näkyvissä (bash-skripti, joten ei pitäisi olla vaikeaa). Lisensoin GPL:llä (liekkö hyvä valinta?), versiota en määritellyt (tiedän, että niissä on eroja).

* Salasana base64-koodattuna. Ei turvallista, mutta parempi kuin sellaisenaan tuolla tiedostossa, koska muutoin joku voisi kurkkia olan yli mikä salasanasi on. Parempia ehdotuksia kyllä otetaan vastaan. Tähän mennessä ainakin itselläni se on ollut sellaisenaan crontabissa.

Muokkaus: Paranneltu skripti saatavilla

[ylläpito on poistanut liitteen]
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 24.04.10 - klo:22.35
Suurkiitos tuosta! Oikein hyvin kommentoitu, niin itsekin pysyy mukana, mitä siinä tapahtuu :) Ei olisi tällaiselta Java-koodarilta tuollainen taipunut  :-[ Laitan tuon heti testiin.

Katsoin tänään, eikä tuo rotaatio tuossa skriptissä tunnu toimivan oikein. Vaikka arvoksi on laitettu kolme, tuosta kansiosta löytyi viisi backup-kansiota. Voi olla, että siirtojen katkeilu ja tuo dashissa ajaminen on sotkenut tuota, joten poistin muutaman kansio tuolta ja katson, meneekö se vielä tuon rajan yli.

Vielä jos joku keksii, miksi tuo exclude ei toimi tuolta tiedostosta annettuna? Pitää testata tänään, toimiiko oikein, jos ne exludet antaa suoraan tuohon lopun rsync-käskyyn.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 25.04.10 - klo:01.28
Nyt toimii rotaatio oikein. Exclude toimii oikein suoraan käskyssä, mutta tiedostosta ei pelitä. Olen kokeillut eri muotoja, esim.

/kansio
kansio/
kansio/*
/kansio/*
"kansio"
"/kansio"

Periaatteessa tuo nyt ei haittaa, kun käskystäkin pystyy hoitamaan asian.

Onko muuten normaalia, että rsyncciä käsin ajaessa konsoli täytyy cp:n virheilmoituksista? Eli kopiointi epäonnistuu, koska kyseinen tiedosto on jo olemassa. Tässä yksi esimerkki:

Koodia: [Valitse]
cp: linkkiä ”/home/käyttäjä/kansio/./etc/hosts.deny” ei voi luoda: Tiedosto on olemassa
Edit: Nyt lähti tuo excludekin toimintaan. Näköjään pitäisi uskoa, kun sanotaan, että polku on suhteellinen. Olin uskollisesti laittanut absoluuttiset polut, eikä se niillä toiminut. Siis jos haluan kotikansiossa oletuksena majailevan Lataukset-kansion pois rsyncin piiristä, se täytyy tehdä seuraavasti:

Koodia: [Valitse]
[s]/home/käyttäjä/Lataukset[/s] <--- EI NÄIN!
Lataukset

Tuossa kannattaa ottaa huomioon, että se sitten jättää poimimatta kaikki Lataukset-kansiot. Kun itse otan nyt vaikkapa /etc:stä kopiot, sieltä jäisi Lataukset-kansio ottamatta, jos siellä sellainen olisi.

Nyt siis vaikuttaisi siltä, että tuo pitäisi enää siirtää rootin croniin ajettavaksi ja mietiskellä, miten seuraisi tuon toimintaa. Pitäisikö nuo vain ohjata logiin? En jaksaisi alkaa sähköpostipalvelinta väsäämään pelkästään tuon raportoinnin takia.

Edit2: Überkiitokset Tomppeli! Hyvin toimii skripti, piti samoin tein laittaa parille koneelle, kun on niin kätevä :D
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 27.04.10 - klo:10.52
Skripti siirretty järjestelmän (tai rootin, miten vaan) cronin ajettavaksi.  Toimii oikein, kun muistin laittaa skriptin oikeudet kohdilleen  ::) Tein croniin postiohjauksen seuraavalla tavalla:

Koodia: [Valitse]
0  2    * * *   root    /polku/rbackup.sh | mail -s "Postia rsync-backupista" käyttäjätunnukseni
Huomasin kuitenkin, että päätteellä komento "mail" ilmoittaa, ettei sitä ole olemassa, vaan pitäisi asennella paketteja. Mikä tuohon olisi mahdollisimman kevyt ratkaisu, kun tarkoituksena on lähettää vain saman koneen käyttäjälle ilmoitus? mail-utils?
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 27.04.10 - klo:13.55
Skripti siirretty järjestelmän (tai rootin, miten vaan) cronin ajettavaksi.  Toimii oikein, kun muistin laittaa skriptin oikeudet kohdilleen  ::) Tein croniin postiohjauksen seuraavalla tavalla:

Koodia: [Valitse]
0  2    * * *   root    /polku/rbackup.sh | mail -s "Postia rsync-backupista" käyttäjätunnukseni
Huomasin kuitenkin, että päätteellä komento "mail" ilmoittaa, ettei sitä ole olemassa, vaan pitäisi asennella paketteja. Mikä tuohon olisi mahdollisimman kevyt ratkaisu, kun tarkoituksena on lähettää vain saman koneen käyttäjälle ilmoitus? mail-utils?

Tuo riittänee kunset ole mihinkään 'ulos' lähettelemässä.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 27.04.10 - klo:20.09
Skripti siirretty järjestelmän (tai rootin, miten vaan) cronin ajettavaksi.  Toimii oikein, kun muistin laittaa skriptin oikeudet kohdilleen  ::) Tein croniin postiohjauksen seuraavalla tavalla:

Koodia: [Valitse]
0  2    * * *   root    /polku/rbackup.sh | mail -s "Postia rsync-backupista" käyttäjätunnukseni
Huomasin kuitenkin, että päätteellä komento "mail" ilmoittaa, ettei sitä ole olemassa, vaan pitäisi asennella paketteja. Mikä tuohon olisi mahdollisimman kevyt ratkaisu, kun tarkoituksena on lähettää vain saman koneen käyttäjälle ilmoitus? mail-utils?

Tuo riittänee kunset ole mihinkään 'ulos' lähettelemässä.


Pitääkin testata tuota illalla. Mitenkäs sitten, jos haluaisi ulospäin lähettää? dy.fi:llä on näköjään ainakin mx-tietuemahdollisuus, joten dns:n puolelta puitteet pitäisi olla olemassa. Ajattelin tätä kysellä lähinnä jatkoa ajatellen, jos joskus tulee tarvetta.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 07.05.10 - klo:08.54
Viritin hieman tuota lähettämistä vielä, enkä tietenkään saa toimimaan halutusti. Varmaankin tässä on kyseessä jokin ihan looginen virhe. Haluaisin siis lähettää postia vain silloin, kun on tapahtunut virhe. Niinpä muutin tuota aiempaa tällaiseksi:

Koodia: [Valitse]
00 2    * * *   root    /polku/rbackup.sh >/dev/null | mail -s "Postia rsync-backupista" käyttäjätunnus

Mutta nyt tuossa käy niin, että jos stderr:iin ei tulostu mitään virhettä, sieltä tulee silti tuo maili pelkkinä otsikkoina. Saisiko tuohon väännettyä jotenkin ehdon tyyliin "if virhe exists --> lähetä postia"?
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 07.05.10 - klo:14.06
Viritin hieman tuota lähettämistä vielä, enkä tietenkään saa toimimaan halutusti. Varmaankin tässä on kyseessä jokin ihan looginen virhe. Haluaisin siis lähettää postia vain silloin, kun on tapahtunut virhe. Niinpä muutin tuota aiempaa tällaiseksi:

Koodia: [Valitse]
00 2    * * *   root    /polku/rbackup.sh >/dev/null | mail -s "Postia rsync-backupista" käyttäjätunnus

Mutta nyt tuossa käy niin, että jos stderr:iin ei tulostu mitään virhettä, sieltä tulee silti tuo maili pelkkinä otsikkoina. Saisiko tuohon väännettyä jotenkin ehdon tyyliin "if virhe exists --> lähetä postia"?

Tuota... Noinhan sen pyydät. Minun mielestäni.
Kurkkaapa mitä saat kun ajat
/polku/rbackup.sh >/dev/null ilman putkitusta mihinkään, ihan päätteessä ;)

Kun näin maallikon silmin, varsinaisen skriptisi tulostus ohjataan /dev/null:iin?

Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 07.05.10 - klo:15.16
Viritin hieman tuota lähettämistä vielä, enkä tietenkään saa toimimaan halutusti. Varmaankin tässä on kyseessä jokin ihan looginen virhe. Haluaisin siis lähettää postia vain silloin, kun on tapahtunut virhe. Niinpä muutin tuota aiempaa tällaiseksi:

Koodia: [Valitse]
00 2    * * *   root    /polku/rbackup.sh >/dev/null | mail -s "Postia rsync-backupista" käyttäjätunnus

Mutta nyt tuossa käy niin, että jos stderr:iin ei tulostu mitään virhettä, sieltä tulee silti tuo maili pelkkinä otsikkoina. Saisiko tuohon väännettyä jotenkin ehdon tyyliin "if virhe exists --> lähetä postia"?

Tuota... Noinhan sen pyydät. Minun mielestäni.
Kurkkaapa mitä saat kun ajat
/polku/rbackup.sh >/dev/null ilman putkitusta mihinkään, ihan päätteessä ;)

Kun näin maallikon silmin, varsinaisen skriptisi tulostus ohjataan /dev/null:iin?



Sieltä tulee noita erroreita tähän tyyliin:

Koodia: [Valitse]
cp: linkkiä "jokin_tiedosto” ei voi luoda: Tiedosto on olemassa

Ihan kaikki ei tuntuisi siis menevän päätteeseen. Saisikohan tuon onnistumaan päin vastoin. Sen sijaan, että ohjaa ykkösen nulliin, ohjaisikin kakkosen (stderr) suoraan tuolle mail-ohjelmalle? Mahtaako moinen olla edes mahdollista?
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 07.05.10 - klo:16.17
Viritin hieman tuota lähettämistä vielä, enkä tietenkään saa toimimaan halutusti. Varmaankin tässä on kyseessä jokin ihan looginen virhe. Haluaisin siis lähettää postia vain silloin, kun on tapahtunut virhe. Niinpä muutin tuota aiempaa tällaiseksi:

Koodia: [Valitse]
00 2    * * *   root    /polku/rbackup.sh >/dev/null | mail -s "Postia rsync-backupista" käyttäjätunnus

Mutta nyt tuossa käy niin, että jos stderr:iin ei tulostu mitään virhettä, sieltä tulee silti tuo maili pelkkinä otsikkoina. Saisiko tuohon väännettyä jotenkin ehdon tyyliin "if virhe exists --> lähetä postia"?

Tuota... Noinhan sen pyydät. Minun mielestäni.
Kurkkaapa mitä saat kun ajat
/polku/rbackup.sh >/dev/null ilman putkitusta mihinkään, ihan päätteessä ;)

Kun näin maallikon silmin, varsinaisen skriptisi tulostus ohjataan /dev/null:iin?



Sieltä tulee noita erroreita tähän tyyliin:

Koodia: [Valitse]
cp: linkkiä "jokin_tiedosto” ei voi luoda: Tiedosto on olemassa

Ihan kaikki ei tuntuisi siis menevän päätteeseen. Saisikohan tuon onnistumaan päin vastoin. Sen sijaan, että ohjaa ykkösen nulliin, ohjaisikin kakkosen (stderr) suoraan tuolle mail-ohjelmalle? Mahtaako moinen olla edes mahdollista?

Kyllä, kakkosen voi ohjata. Ja yllättäen konstikkaan näköisellä loitsulla.
Kokeilepa
/polku/rbackup.sh 2>/dev/null

Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 08.05.10 - klo:02.56

Sieltä tulee noita erroreita tähän tyyliin:

Koodia: [Valitse]
cp: linkkiä "jokin_tiedosto” ei voi luoda: Tiedosto on olemassa

Ihan kaikki ei tuntuisi siis menevän päätteeseen. Saisikohan tuon onnistumaan päin vastoin. Sen sijaan, että ohjaa ykkösen nulliin, ohjaisikin kakkosen (stderr) suoraan tuolle mail-ohjelmalle? Mahtaako moinen olla edes mahdollista?

Kyllä, kakkosen voi ohjata. Ja yllättäen konstikkaan näköisellä loitsulla.
Kokeilepa
/polku/rbackup.sh 2>/dev/null



Meinasin jo tuota kokeillakin päivällä, mutta rupesin miettimään, että eikös tuo nyt ohjaa virheet nulliin eli niistä ei lähde ilmoitusta postilla? Onko tällainen mahdollinen:
Koodia: [Valitse]
/polku/rbackup.sh 2> | mail -s "Postia rsync-backupista" käyttäjätunnus Vai sotkeeko tuossa ohjausmerkki ja putki toisiaan, kun ne ovat peräkkäin?
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: jekku - 08.05.10 - klo:06.31

Sieltä tulee noita erroreita tähän tyyliin:

Koodia: [Valitse]
cp: linkkiä "jokin_tiedosto” ei voi luoda: Tiedosto on olemassa

Ihan kaikki ei tuntuisi siis menevän päätteeseen. Saisikohan tuon onnistumaan päin vastoin. Sen sijaan, että ohjaa ykkösen nulliin, ohjaisikin kakkosen (stderr) suoraan tuolle mail-ohjelmalle? Mahtaako moinen olla edes mahdollista?

Kyllä, kakkosen voi ohjata. Ja yllättäen konstikkaan näköisellä loitsulla.
Kokeilepa
/polku/rbackup.sh 2>/dev/null



Meinasin jo tuota kokeillakin päivällä, mutta rupesin miettimään, että eikös tuo nyt ohjaa virheet nulliin eli niistä ei lähde ilmoitusta postilla? Onko tällainen mahdollinen:
Koodia: [Valitse]
/polku/rbackup.sh 2> | mail -s "Postia rsync-backupista" käyttäjätunnus Vai sotkeeko tuossa ohjausmerkki ja putki toisiaan, kun ne ovat peräkkäin?

Ähh.. Juu, toki tuo "2>/dev/null" ohjaa errorit nulliiin. Luin toivomuslistan huolimattomasti :(

En muuten tiedä saako errorin tuupattua sellaisenaan maillin.
Joissain tapauksissa kikkaillut siten että errorit tiedostoon ja tarvittaessa mailiin.
Tyyliin:
komento_jossain 2>errori.txt || cat errori.txt | mail ...
Tuon idea on siinä että maili ei lähde ellei erroreita ole.
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 08.05.10 - klo:22.28

En muuten tiedä saako errorin tuupattua sellaisenaan maillin.
Joissain tapauksissa kikkaillut siten että errorit tiedostoon ja tarvittaessa mailiin.
Tyyliin:
komento_jossain 2>errori.txt || cat errori.txt | mail ...
Tuon idea on siinä että maili ei lähde ellei erroreita ole.


Tuota täytyykin kokeilla. Tuo on ainakin idean tasolla juuri sitä, mitä haen. Tiedostokin säilyy inhimillisen kokoisena, kun sisältö aina korvautuu uudella. Oikein lupaavan kuuloista :)
Otsikko: Vs: Varmuuskopiointi, ssh + rsync
Kirjoitti: Tha-Fox - 13.05.10 - klo:02.55
Muutin tuota cronin komentoa antamasi esimerkin mukaisesti käyttämään välitallennusta tiedostoon. Tiedosto syntyy ja sieltä löytyy samat virheet kuin mitä se näytölle tulostuu testattaessa. Mutta putkituksessa mailiin on jotain häröä, koska postia ei koskaan tule aiheesta.

Täytynee googlettaa vielä lisää. Luulisi tuon olevan sen verran tavallinen käyttötarkoitus cronin kanssa, että joku sen on ratkaissut onnistuneesti :)