[RedHat] lijst genereren van 1 bestand in verschillende dirs

Pagina: 1
Acties:

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Ik ben bezig met het schrijven van een backupscript voor een webserver.
Ik kopieer op dit moment de complete /home dir naar een aparte schijf, pak deze in, en laat deze downloaden door een andere server op een andere locatie. Echter, dit bestand word erg groot.

Nu had ik het idee om alle access_log files eruit te halen alvorens ik hem inpak. Alleen, ik krijg gewoon geen commando gevonden om dit voor elkaar te krijgen :'(

man grep helpt me niet echt verder, en andere commando's die dit zouden kunnen doen krijg ik zo niet gevonden :(

Voor de duidelijkheid: De directorystructuur is als volgt:

/home/klant/www.domein1.nl/logs/access_log
/home/klant/www.domein2.nl/logs/access_log

enz enz.

Deze complete homedir word gekopieerd naar /backup/$date/home/klant/etc

Het is geen optie om een vaste lijst in te geven van files die hij moet deleten, dit moet echt iedere keer opnieuw gegenereerd worden (ivm vertrekkende en bijkomende klanten).

Ik hoop dat jullie me een subtiele zet in de goeie richting kunnen geven. Alvast bedankt!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 29-04 12:38
Vraagje: waarom kopieer je eerst alles voordat je het inpakt? Dat heeft toch geen enkele zin?

Als je problemen hebt met files die tijdens het maken van de backup gewijzigd worden (consistency-probleem) heb je dat net zo hard als je eerst alles kopieert - dus dat snap ik niet.

Hoe je een lijst kunt maken:

find /home | grep -v "access_log$" filtert alle bestandsnamen die eindigen op 'access_log" uit de lijst met files in /home.

Lastig detail: je kunt maar een beperkt aantal argumenten meegeven op de commandline van bash (10k argumenten ofzoiets) - dus je kunt niet letterlijk elke file die tar/cp wel of niet moet inpakken/kopieeren meegeven op de commandline - tenzij je zeker weet dat dit er nooit meer zijn dan ~10k (als je er overheen gaat krijg je wel een foutmelding, uiteraard). Het is om die reden dus geen goed idee om zoiets te doen:

tar cfz backup.tgz `find /home | grep -v "access_log$"`

Hiervoor bestaat de tar-optie '--files-from [eenfilename]'. Dus zoiets zou je dan krijgen (simpel script):

Bash:
1
2
3
4
#!/bin/bash
find /home | grep -v "access_log$" > /tmp/backuplijst
tar cfz /ergens/backup-vandaag.tgz --files-from /tmp/backuplijst
rm /tmp/backuplijst

[ Voor 8% gewijzigd door Wilke op 03-11-2003 17:04 ]


  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Even voor de duidelijkheid, die *andere* server die de file download, wat voor toegang heb je daar op?

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
De directorystructuur is als volgt:

/home/klant/www.domein1.nl/logs/access_log
/home/klant/www.domein2.nl/logs/access_log
[obvious mode]
Ik neem aan dat je een htaccess-je hebt in de logs/ he ;)
[/obvious]

  • mocean
  • Registratie: November 2000
  • Laatst online: 30-03 18:32
Je kan ook kiezen voor een backup met bijvoorbeeld rsync (als je genoeg rechten hebt op beide bakken). Die kopieert alleen nieuwe/veranderde bestanden en je kan heel makkelijk files instellen die rsync moet negeren.

Koop of verkoop je webshop: ecquisition.com


  • Insanergy
  • Registratie: Juli 2001
  • Laatst online: 29-11-2025
ehm.. :?

# updatedb
# locate access_log

[ Voor 21% gewijzigd door Insanergy op 04-11-2003 01:01 ]

But I thought YOU did the backups...


  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Ik heb op beide machines root access (ben de beheerder).

Inderdaad, rsync is een goeie optie, maar heb ik me nog niet in kunnen verdiepen. Voor nu is een simpele tarball maken van de hele homedir een goeie optie voor me.
Rsync moet nog een keer komen.

Wilke: TOP, echt TOP. Er zijn dus meerdere wegen die naar rome leiden..
De reden dat ik eerst alles kopieerde was dus om die files eruit te filteren, en dan pas een tarball te maken.

Insanergy: dan krijg je een lijst van EN /home EN /backup waar alles dus staat..

  • Insanergy
  • Registratie: Juli 2001
  • Laatst online: 29-11-2025
Weppel schreef op 04 november 2003 @ 01:15:
Insanergy: dan krijg je een lijst van EN /home EN /backup waar alles dus staat..
# locate access_log | grep ^/backup :+

But I thought YOU did the backups...


Verwijderd

Overigens heeft find mooie opties als -iname en -exec ;)

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 15:57

Kees

Serveradmin / BOFH / DoC
En heeft tar mooie optiex als --exclude ;)

Oftewel, gewoon die zooi inpakken met tar, en dan de files excluden die je niet wil :)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 15:57

Kees

Serveradmin / BOFH / DoC
code:
1
2
3
4
PID=$$
find /home -iname 'access_log' > /tmp/exclude-backup-$PID
tar zcf /ergens/backup-vandaag.tgz --exclude-from /tmp/exclude-backup-$PID
rm /tmp/exclude-backup-$PID


Dit heeft als voordeel dat er mindere processen gebruikt worden, en je net even anders backupped. Bij wilke backup je alleen wat niet log_access is, hier backup je alles behalve de access_logs.
Dat heeft als voordeel dat je backuplijst niet zo lang wordt (de file waar tar zijn dingen uithaald) en dat je geen problemen hebt met namen die hoe dan ook fucked up kunnen worden in de fileslist (denk aan namen met spaties e.d., weet niet hoe tar daar mee omgaat als het uit zo'n file komt)

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Ik hou van jullie O+ :>

Ik ga er vandaag naar kijken, en laat jullie mn bevindingen weten!

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Ok geen tijd om je te verdiepen in rsync. Dan volgt hier het voorgebakken shell script voor rsync over ssh :o. Dit script draai je op je serverA, die wordt dan gebackupped naar
code:
1
2
3
4
5
6
DEST="serverB"
USER="root"
BACKDIR="/home"
DESTDIR="/opt/backups/webhome"
EXCLUDES=/root/backup/excluded
OPTS="-z -u -a -p --delete --rsh=ssh --exclude-from=$EXCLUDES"


serverA is je webserver
serverB is je backup machine
Als je logfiles niet mee wil hebben, dan pak je het find script uit een van de vorige posts en laat dat eerst de namen van de logfiles naar de EXCLUDED file sturen.
Niet zeuren dat het te moeilijk is, gewoon doen :)
Stop met tar, dat is super inefficient (en vies :r)

PS om dit uit cron te laten doen moet je SSH authorized_keys enzo aanmaken maar daar moet in GOT het e.e.a. over te vinden zijn.

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Graag toch even wat meer uitleg, ik heb er wat mee gestoeit, maar ik snap nog niet echt precies wat je script nu doet.
Als ik het zo zie maakt het alleen maar een setje variabele, meer niet.. wat moet ik daarmee doen dan ??

Ook man rsync legt niks uit van shellscript oid...

[ Voor 84% gewijzigd door Weppel op 04-11-2003 13:26 ]


  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Als ik het zo zie maakt het alleen maar een setje variabele, meer niet.. wat moet ik daarmee doen dan ??

Ook man rsync legt niks uit van shellscript oid...
Oh stom ik had de laatste regel vergeten mee te copyen |:(
zo gebeurt er inderdaad niks... Deze regel onderaan doen:
code:
1
rsync $OPTS $BACKDIR $USER@$DEST:$DESTDIR

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Ik was al gaan gokken met rsync $OPTS, maar toen kreeg ik alleen maar een helpfile voor mn neus ;)

Ik ga weer even hobbyen, en meld me als ik het niet snap.

Er komt nu een feed binnen van rsync :)

Dit script kan ik dus in de cron zetten (als ik die SSH authorised keys aanmaak), en dan update hij iedere dag de content daarin..

Nice :Y)

[ Voor 36% gewijzigd door Weppel op 04-11-2003 13:50 ]


  • usr-local-dick
  • Registratie: September 2001
  • Niet online
rsync ROCKT echt zwaar, je hoeft gelukkig niet al die black magic te weten van hun (o.a. http://rsync.samba.org/tech_report/node3.html) om het te gebruiken :o

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Die wil ik idd niet weten ;)

RSync is zojuist klaar met de synchronisatie. Nu nog effe snel het scriptje in de crontab proberen te zetten, met dat ssh authorised keys verhaal.

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Search geeft wel wat info terug, maar die is redelijk onduidelijk voor mij iig... laatste hulp nog? :)

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
Weppel schreef op 04 november 2003 @ 14:53:
Search geeft wel wat info terug, maar die is redelijk onduidelijk voor mij iig... laatste hulp nog? :)
Op serverA:
ssh-keygen -t dsa
Dan kopieren naar ServerB:
scp .ssh/id_dsa.pub root@serverB:.ssh/authorized_keys2
Dan op ServerB de permissies goed zetten:
chmod 400 .ssh/authorized_keys2

dat zou het moeten zijn, als je nu van serverA in probeert te loggen naar ServerB zou je geen password moeten intypen.

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Gedaan wat je hierboven zegt, hij blijft vragen om een password. Ook het scp commando werkt niet.. krijg dit als output terug:

[root@ams01 root]# scp id_dsa.pub root@backupip: id
id: Not a directory
[root@ams01 root]# root@backupip's password:
Permission denied, please try again.
root@backupip's password:
Permission denied, please try again.
root@backupip's password:
Permission denied (publickey,password,keyboard-interactive).

Ik heb dus handmatig de file gekopieerd (via shell openen, info kopieren, en plakken in nieuwe file in andere shell). Geen resultaat..

[ Voor 16% gewijzigd door Weppel op 06-11-2003 10:15 ]


  • Wilke
  • Registratie: December 2000
  • Laatst online: 29-04 12:38
Insanergy schreef op 04 november 2003 @ 02:08:
[...]


# locate access_log | grep ^/backup :+
locate gebruiken voor dit soort dingen zou ik niet doen. Sowieso moet je dan eerst updatedb draaien (wat langer duurt dan een find op een of andere subdir), wachten tot die helemaal klaar is, en dan locate gebruiken.

Het kan wel, maar ik zou het zelf iig niet doen.

Kees: natuurlijk kan het op nog 10 andere manieren (waaronder met tar zelf vast ook wel), maar OK :P

  • usr-local-dick
  • Registratie: September 2001
  • Niet online
[root@ams01 root]# scp id_dsa.pub root@backupip: id
id: Not a directory
Die file moet je dus kopieren en de naam "authorized_keys2" geven.
Hij moet ook in je .ssh directory staan.
De permissies moeten ook goed staan.
En het moet natuurlijk we aan staan in je /etc/ssh/sshd_config :)
code:
1
PubkeyAuthentication yes
Ik heb dus handmatig de file gekopieerd (via shell openen, info kopieren, en plakken in nieuwe file in andere shell). Geen resultaat..
Knippen en plakken is moeilijk omdat het 1 regel is met > 1000 karakters.
Dat werkt niet altijd even goed.
Anyway er is heel veel te vinden op ons mooie internet.
Bijvoorbeeld: http://www.cs.umd.edu/~arun/misc/ssh.html

  • Weppel
  • Registratie: Oktober 2000
  • Laatst online: 29-04 07:18
Okee, we zijn er uit ;)

Ten 1e, permit root login stond op serverB uit, vandaar dat hij niet direct als root wilde inloggen :)

Ten 2e, ik gaf de helft van de tijd ipv root@serverB: root@: mee.. dus geen server waar hij heen kon connecten O-)

Maar het werkt nu eindelijk.. erg bedankt allemaal :> en usr-local-dick vooral :> :> leuke naam trouwens :P
Pagina: 1