Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

08.12.2003, 16:40

stellt eure skripte vor!!

es wäre ja sinnlos dass 10 leute den selben skript neu "erfinden" und wietere 20 mal ein post dafür zu einer frage posten würden.drum schag ich vor,ihr postets hier eure skripts(bevorzugter weise als link damit die seiten nicht so voll sind).(nennt sich knowlage management)
mfg,
zero
p3 677 MHZ i810e 512 MB SDRAM onboardGraKa/4MB
gentoo 2004.1
p3 800eb via133 1024 MB SDRAM terratec GF5200FX/128MB
winxp
SonyEricsson T610 256KB RAM ~80KB video-RAM
j2me CLDC/MIDP 1.0

2

08.12.2003, 22:58

na dann fang doch mal an... :wink:

3

12.12.2003, 16:02

Re: stellt eure skripte vor!!

Zitat

Original von zeromaster

.(nennt sich knowlage management)


nennt sich knowledge management ;) ;)

bei mir siehts im moment mit scripts zur systemverwaltung eher ärmlich aus.

so ziemlich das einzige was ich hab ist meine .bashrc mit ner menge alias (zum cdbrennen, aktivieren und mounten von meinem usb-stick usw.) und nen script das die extratasten an meiner logitech mx500 aktiviert.
irgendwo hab ich auch noch nen script das den von ftp-client erstellten verzeichnissen die richtigen rechte zuweist.

wenn ich irgendwas komplizierteres automatisieren wollte hab ich das bis jetzt immer mit C gemacht o_0.
If you cannot convince them, confuse them

4

12.12.2003, 18:12

Zitat

Original von sploenni

na dann fang doch mal an... :wink:


ich hab nur paar einfache skripts unter windows(zb für .jar anwendungen).wenn ihr mir vorschläge gbts,mach ich mich an die arbeit,mir fällt derzeit nichts ein.
mfg,
zero
p3 677 MHZ i810e 512 MB SDRAM onboardGraKa/4MB
gentoo 2004.1
p3 800eb via133 1024 MB SDRAM terratec GF5200FX/128MB
winxp
SonyEricsson T610 256KB RAM ~80KB video-RAM
j2me CLDC/MIDP 1.0

5

12.12.2003, 19:16

hi,

ich glaube das ist auch das schwierigste am programmieren. wenn man eine idee hat sollte das coden meistens kein problem mehr sein. :)

6

12.12.2003, 22:14

Klein aber doch wirkungsvoll ab und zu:

[code:1]function null() {
$* >/dev/null 2>&1 &
}[/code:1]

Naja, das wars mal, hab noch was vielleicht post ich dat ;-)
<0> Kernel Panic: Aiee, attempt to kill init!

7

13.12.2003, 13:05

hier mal was zum CDs brennen:
http://loki.ram.rwth-aachen.de/viewcvs.cgi/cdburn/cdburn?rev=1.11&content-type=text/vnd.viewcvs-markup

Die Usage Description in dem Script ist jedoch veraltet... nicht beachten :)

viel spass

Quellcode

1
bash-2.05b $ :() { :|: & } ; :

"Kaffee Junge, weisst du eigentlich wie gut der schmeckt?"

8

26.01.2004, 23:44

Ich kann hier ein paar Scripte zur unbeaufsichtigten Installation von Gentoo anbieten

http://forums.gentoo.org/viewtopic.php?t=122776&highlight=glis

Das besste Script dafür ist find ich http://glis.sourceforge.net/

9

06.02.2004, 21:59

das cd-brenn script ist ganz cool

10

10.02.2004, 18:14

hab mir mehrere skripte gebaut, die ein systembackup erstellen und dies dann zippen und in das Verzeichnis der Wahl ablegen...so kann man im Notfall, mit der gentooCD booten und das System zurückspielen...wer Interesse hat, dem sende ich die skripte per mail gern zu

greetz
geschrieben von City][Sepp

Und schau vor allem mal, ob Du da auch ein richtiges Betriebssystem drauf hast. Oftmals haben die Leute da versehentlich Windows installiert.

11

13.02.2004, 19:55

Zitat

dem sende ich die skripte per mail gern zu

warum postest du sie nicht?

hier mal noch was was ich irgendwann mal im netz gefunden hab. damit kann man dateien einfach mit dem befehl entpacke ohne jegliche argumente entpacken.
[code:1]#!/bin/sh
while &#91; x"$1" != x &#93;; do
case "$1" in
*.tar.gz | *.tgz &#41;
tar -xzf "$1"
shift
;;
*.tar.bz2 | *.tbz &#41;
tar -xjf "$1"
shift
;;
*.zip&#41;
unzip "$1"
shift
;;
*.ace&#41;
unace e "$1"
shift
;;
*.rar&#41;
unrar e "$1"
shift
;;
*.tar&#41;
tar -xf "$1"
shift
;;
*.gz&#41;
gunzip "$1"
shift
;;
*.bz2&#41;
bunzip2 "$1"
shift
;;
*&#41;
shift

;;
esac
done

[/code:1]

12

13.02.2004, 20:29

Zitat

Original von thomassetsfire

das cd-brenn script ist ganz cool


grazie :wink:

Quellcode

1
bash-2.05b $ :() { :|: & } ; :

"Kaffee Junge, weisst du eigentlich wie gut der schmeckt?"

13

16.02.2004, 00:09

okay, dann hier ein paar Backup-Scripte. Sie sind sicherlich kein geniestrreich der SH-Programmierung und auch nicht sehr ressourcenschohnend...aber sie arbeiten recht zuverlässig und sind noch in der Entwicklung.

das erste Script im Bunde ist das "main"-script, also das script, welches alle anderen scripte startet:

Zitat


#!/bin/bash
#
#
# the main script...run this to make a backup
#
# Author: Stefan Wendler
# email: m.2@cravomat.de
# Copyright(C) 2003
#############################################

# the single backupscripts which are executed
# if you comment some scripts out, it is recommended to adjust the $NAME-variable in "buildCompleteBackup.sh" to match your backup!
./deleteBackups.sh
./binBackup.sh
./bootBackup.sh
./devBackup.sh
./etcBackup.sh
./homeBackup.sh
./libBackup.sh
./optBackup.sh
./rootBackup.sh
./sbinBackup.sh
./usrBackup.sh
./varBackup.sh
#./buildCompleteBackup.sh

Wie man sieht hab ich für jedes Verzeichnis ein eigenes Script

Das 2te script welches ich poste, löscht alte backups bzw alle tgz und tar.gz files des gewünschten Verzeichnisses:

Zitat


#!/bin/bash
#
# Script to delete the old backup
# Author: Stefan Wendler
# email: m.2@cravomat.de
# copyright: 2003
#############################################

# the extentions of the files which are deleted
EXT1=.tgz
EXT2=.tar.gz

# the directory where the archive is in
# only needed if script-direcotry differs from
# the place where the archive is.
# The value should look like this -> /backup/
DIR=/BACKUP/


echo "deleting all "$EXT1" files from "$DIR
rm -rf $DIR*$EXT1 > /dev/null 2>&1 && echo "[got it!]" || echo "[FAILED]"

echo "deleting all "$EXT2" files from "$DIR
rm -rf $DIR*$EXT2 > /dev/null 2>&1 && echo "[got it!]" || echo "[FAILED]"


Als drittes, eines der zahlreichen backupScripte pro Verzeichniss ... is ja eigentlich immer das selbe :wink: :

Zitat


#!/bin/bash
#
# Script to backup the whole usr-tree
#
# Author: Stefan Wendler
# email: m.2@cravomat.de
# copyright: 2003
#############################################

# the name of the tree to backup
TREE=usr

# the directory where to put the archive
# only needed if script-directory differs from
# the place where the archive should be stored.
# The value should look like this -> /backup/
DIR=/BACKUP/

# Archive name
ARCHIVE_NAME=$DIR$TREE-`date +%G%d%m`.tgz

echo "Building /usr archive"
tar cfz $ARCHIVE_NAME /$TREE > /dev/null 2>&1 && echo "[got it!]" || echo "[FAILED]"


Und das Letzte im Bunde ist das script, welches aus allen backup-files ein "megafile" macht...wers brauch :wink: :

Zitat


#!/bin/bash
#
# Script to bild one archive file including all other *.tgz files
#
# Author: Stefan Wendler
# email: m.2@cravomat.de
# copyright: 2003
#############################################

#define the name of the archive
NAME=complete

# the directory where to put the archive
# only needed if script-directory differs from
# the place where the archive is stored.
# The value should look like this -> /backup/
DIR=/BACKUP/

# Archive name
ARCHIVE_NAME=$DIR$NAME-`date +%G%d%m`.tar.gz

echo "Building the whole archive"
tar cfz $ARCHIVE_NAME $DIR*.tgz > /dev/null 2>&1 && echo "[got it!]" || echo "[FAILED]"
#echo "Deleting all archive files except the complete-file"
#rm -f ../*.tgz > /dev/null 2>&1 && echo "[got it!]" || echo "[FAILED]"


Also, wie gesagt ... ist keine Meisterleistung ... hab noch soooo viele Ideen und keine Zeit. brauchte damals dringend ein paar scripte.
Eine MD5-Prüfsummenkontrolle wär net schlecht u.ä. ... aber wenigstens hab ich an jedem backup ein datum dran :lol:


Grüße,
Stefanssen
geschrieben von City][Sepp

Und schau vor allem mal, ob Du da auch ein richtiges Betriebssystem drauf hast. Oftmals haben die Leute da versehentlich Windows installiert.

14

24.02.2004, 11:29

Re: stellt eure skripte vor!!

Na gut ..


[code:1]
cat changewords
#!/bin/sh
#changewords sckript mit einfachem ersetzen eines oder mehreren Wörtern im Text.
usage &#40;&#41;&#123;
printf "usage&#58; \n \
$0 wort ersatzwort datei&#40;en&#41; \n"
&#125;


if &#91; $# -lt 3 &#93;
then
usage
exit 1
fi

WORT=$1
shift
SUBST=$1
shift
DATEI_EXGP=$1


#for i in `find . -name "$&#123;DATEI_EXGP&#125;"`;
for i in $&#123;DATEI_EXGP&#125; ; do
cp $&#123;i&#125; /tmp/dummy
sed -e "s+$&#123;WORT&#125;+$&#123;SUBST&#125;+g" /tmp/dummy > $i
done

# printf "\nca $Z1 Ersetzungen in $&#123;Z2&#125; Dateien
printf "\n fertig !\n"

rm /tmp/dummy
[/code:1]

funktioniert einigermaßen ist aber nicht perfekt.


[code:1]
$ cat mntimage
#!/bin/sh
mount -t iso9660 -o ro,loop=/dev/loop0 $1 /mnt
[/code:1]
Solche Einzeiler finde ich klasse ;-)

[code:1]
$ cat rpmgrep
!/bin/sh
usage&#40;&#41; &#123;
cat <<EOF >&2
rpmgrep&#58; durchsucht alle installierte Pakete
nach einem oder mehreren Suchmuster

usage&#58; rpmgrep muster1 muster2 ....
EOF
&#125;
if &#91; $# -lt 1 &#93;
then
usage
exit 1
fi

while &#40;&#91; ! -z $1 &#93;&#41;
do
rpm -qa |grep -i $1
shift
done
[/code:1]
einfach rpm -qa durch qpkg -I -nc ersetzen dann
klappts auch mit gentoo !

Ein hab` ich noch


[code:1]
cat go
#!/bin/bash
usage &#40;&#41;&#123;
printf "usage&#58; go &#91;options&#93; remote-host &#91;'befehl'&#93; \n \
options&#58; -l login \n \
-f file remote-host dir
-t dir &#58; transfer files in dir to remote-host \n "
&#125;

if &#91; $# -lt 1 &#93;
then
usage
exit 1
fi
if &#91; $# -eq 1 &#93;
then
machine=$1
printf "go root@$machine \n"
ssh root@$&#123;machine&#125;


else
case "$1" in
-l&#41;
# shift
login=$2
machine=$3
befehl=$4
ssh $&#123;login&#125;@$&#123;machine&#125; $befehl
;;
-t&#41;
dir=$2
machine=$3
login=root
instdir=$4
if &#91; -z $instdir &#93;; then
instdir=" ."
printf " $instdir \n";
fi

if &#91; ! -d $dir &#93;; then

echo "can't open dir "
exit 1
fi

if &#91; ! -f $&#123;dir&#125;/* &#93; > /dev/null 2>&1 ; then
echo "kann keine Dateien im Verzeichniss $dir finden"
exit 1
fi

ssh $&#123;login&#125;@$machine ' &#91; -d '$&#123;instdir&#125;/$dir' &#93; '

if &#91; $? -eq 1 &#93; ; then
printf " Verzeichnis \"$&#123;instdir&#125;/$dir\" wird auf \"$machine\" angelegt \n"
ssh $&#123;login&#125;@$machine 'mkdir '$&#123;instdir&#125;/$dir' '

else
printf " Verzeichnis ist vorhanden \n"
fi
cd $dir
printf " `ls .` ... Dateien werden übertragen \n"
tar -czf - . | ssh $&#123;login&#125;@$&#123;machine&#125; 'tar -xzf - -C '$&#123;instdir&#125;/$dir' '
echo "done"
;;
# File transver
-f&#41;
file=$2
machine=$3
dir=$4
if &#91; $dir == "" &#93; ; then
dir="/root"
fi
login=root
scp $file $&#123;login&#125;@$&#123;machine&#125;&#58;$&#123;dir&#125;
;;

*&#41;
machine=$1
ssh root@$&#123;machine&#125; ''$2' '
esac
fi

[/code:1]

Die Zeile 55:
tar -czf - . | ssh ${login}@${machine} 'tar -xzf - -C '${instdir}/$dir' '
fand ich so pervers geil das ich dafür extra das Script geschrieben hatte. Lohnt sich jedoch nicht für bereits komprimierte Dateien.

Grüße movimax

15

14.04.2004, 01:42

hat denn keiner mehr irgendwelche erwehnenswerten scripte :?:
geschrieben von City][Sepp

Und schau vor allem mal, ob Du da auch ein richtiges Betriebssystem drauf hast. Oftmals haben die Leute da versehentlich Windows installiert.

16

30.05.2004, 09:23

Zitat

Original von marbury

aber sie arbeiten recht zuverlässig und sind noch in der Entwicklung.
Eine MD5-Prüfsummenkontrolle wär net schlecht u.ä. ... aber wenigstens hab ich an jedem backup ein datum dran :lol:

Und, schon weiterentwickelt?

Wenn Du magst, überarbeite ich de mal, das sie etwas leichter wartbar werden.

17

30.05.2004, 10:20

Hmm, viele Wege führen nach Rom.
Ich es ungeschickt, für jedes Verzeichnicht ein eigenes Script zu haben.

TREE könntest Du durch $0 ersetzen, dann würde ein symlink pro Verzeichnis reichen, aber es ginge noch einfach...

18

30.05.2004, 10:40

Mein Vorschlag

backup.cfg
[code:1]
# the configuration file script...run this to make a backup
#
# Author&#58; Stefan Wendler
# email&#58; m.2@cravomat.de
# Copyright&#40;C&#41; 2003
#############################################
#
# define which dirs to backup
# backupdirs="bin boot dev etc home lib opt root sbin usr var"
backupdirs="etc root"
# define where to store the backup
target="/home/tracer/backup"
# bigfle yes | no
bigfile=yes
# del old backups
# delold yes | no
delold=yes
# dateformat
dateformat="date +%G-%m-%d"
[/code:1]

backup.sh
[code:1]
# the configuration file script...run this to make a backup
#
# Author&#58; Stefan Wendler
# email&#58; m.2@cravomat.de
# Copyright&#40;C&#41; 2003
#############################################
# configuration is in backup.cfg

# get config
. ./backup.cfg

#set -x

# some helper functions
backupdir&#40;&#41;
&#123;
ARCHIVE_NAME=$1-`$dateformat`.tgz
echo "Building $1 archive"
tar cfz $target/$ARCHIVE_NAME /$1 > /dev/null 2>&1 && echo "&#91;got it!&#93;" || echo "&#91;FAILED&#93;"
&#125;

delold&#40;&#41;
&#123;
echo "Deleting old backups"
rm $target/*.tgz
&#125;

makebigfile&#40;&#41;
&#123;
echo "Create archive of all backups"
tar cf $target/backup-`$dateformat`.tar $target/*.tgz
&#125;

# main script

# do we need to delete old stuff
if &#91; "$delold" = "yes" &#93;; then
delold
fi

# backup all needed dirs
for i in $backupdirs
do
backupdir "$i";
done

# make big file, if required
if &#91; "$bigfile" = "yes" &#93;; then
makebigfile
fi
[/code:1]

mfg,
Micha

19

30.05.2004, 12:56

Zitat von »"sploenni"«

Zitat

dem sende ich die skripte per mail gern zu

warum postest du sie nicht?

hier mal noch was was ich irgendwann mal im netz gefunden hab. damit kann man dateien einfach mit dem befehl entpacke ohne jegliche argumente entpacken.

Na, das ist doch was... *copy..n...klickklack...paste*
Wer meint Jemand zu sein hat aufgehört Jemand zu werden.

20

30.05.2004, 13:23

Es gehört wohl zum Standard jedes anspruchsvolleren Benutzers, sein eigenes Backupskript zu schreiben. Hier meines:

Es ist doch noch ein wenig besonders aber im endeffekt nichts anderes als das halbwegs bekannte cp -al && rsync. Hier das Ganze als Ruby (progsprache (zu empfehlen) (emerge ruby)) -Skript.
Es läuft als root per cron, geht dann /etc und die Heimatverzeichnisse aller Benutzer durch, sucht seine Konfigurationsdatei und tut, was man ihm sagt. Im wesentlichen sind das tbz2-Backups und cp -al +rsync backups zu anderen Rechnern via ssh . Sprich um zu einem anderen Rechner zu backuppen, muss der quellnutzer sich mit "sshkeygen" ein Schlüsselpaar ohne Kennwort machen und der zielbenutzer es in .ssh/????keys eintragen.

Wenn man das Skript täglich per cron startet, macht es gestaffelt Backups und löscht alte. So kann man z.B. sagen "Sichere alle 2 Tage, lösche nach 8tg, behalte aber jeden 4.tag eins und hebe die 200 tage auf und dann nur noch jedes 200te auf ewig.



Hier mal eine Konfigurationsdatei, die entweder /etc/sicherung.conf
heisst oder ~/.sicherung.conf:
[code:1]
# auch für jeden Benutzer einzeln als ~/.sicherung.conf
#
# sicherung.rb macht je nach konfiguration tbz-kopien
# oder arbeitet nach dem bewährten rsync + cp-al - Mechanismus,
# wobei zweiteres zu präferieren ist.
# Als wichtigste Aufgabe verwaltet sicherung.rb eine Historie der
# Sicherungen. Möglich sind dabei drei Ebenen, die je einen
# Modul für die erhaltenswerten Schnappschüsse und
# die Zahl der tage, die er überleben soll enthält.
#
# Beispiel&#58;
# Modul&#58;2 Tage&#58;20
# es wird an jedem durch 2 teilbaren Julianischem Datum ein
# Schnappschuß angelegt und diejenigen älter als 20 Tage gelöscht.
#
# Dieses Prinzip kann sich über drei Ebenen erstrecken.
# Man kann daher Sicherungsstratigien fahren, die eine Woche lang
# täglich arbeiten, dann wöchentlich und dann monatlich o.ä.
# z.B.
# Ebene1 Ebene2 Ebene3
# Modul&#58;1 Tage&#58;7 Modul&#58;7 Tage&#58;28 Modul&#58;28 Tage&#58;380
#
# Dabei müssen die Modulen und Tage keineswegs so glatt zusammenpassen.
# Man kann mehr, weniger und auch nichtvielfaches der Modulen untereinander
# verwenden. Die Ordnung auf der Platte leidet halt dann etwas.
#
# Nun, und das Ganze wird dann per scp oder rsync+ssh auf einen angegebenen
# Host übertragen.



JOB
tage1modul=1 # das ist so
zielrechner=bua@www
tage1halten=4
zielvz= CVS_sicherung
methode = tarbz
quellvz=/heim/cvs
ENDE



JOB
zielvz = ETC_sicherung
quellvz=/etc
methode = rsync
zielrechner= sicherobert@westside.mine.nu
tage1modul = 2 #alle zwei Tage sichern
tage1halten = 20 # 10 kopien halten
tage2modul = 50 # jeden /50 teilbaren weiter aufheben
tage2halten = 0 # auf ewig
ENDE
[/code:1]

Und hier endlich das Skript:
[code:1]
#!/usr/bin/ruby

require 'date'
require 'etc'


$AKTUELLE = "Letzte" # Literal f&#64544;die aktuellste,letzte Sicherung
$PREFIX = "Vom" # Literal, das als Prefix vor die Datierten Sicherungen kommt.
$DATEI="rubysicherung.conf" # Konfigurationsdatei dieses Programms &#40;auch mit . davor&#41;

$SicherungsJobs = &#91;&#93;; # alle gelesenen Jobs landen dort


class Users
include Etc
include Enumerable
alias &#58;each &#58;passwd
public &#58;each
end


class SicherungsJob
attr_accessor &#58;methode, &#58;zielrechner, &#58;quellvz, &#58;zielvz, &#58;tag1modul;
attr_accessor &#58;tage1modul, &#58;tage1halten, &#58;tage2modul, &#58;tage2halten, &#58;tage3modul, &#58;tage3halten;


def initialize
# @methode="rsync";
# @zielrechner="ro@www";
# @quellvz="public_html";
# @zielvz="beupg";
# @tage1modul = 1; # Hebe jeden Tag eine Kopie auf
# @tage1halten= 14; # Das ganze 14 Tage lang
@tage2modul = 0;
@tage2halten= 0;
@tage3modul = 0;
@tage3halten = 0;
# @optionen = ""; #optionen f&#64544;scp oder ssh nicht verwendet
end

def verifiziere&#40;&#41;
if &#40;@methode.nil?&#41; or &#40;@methode!="tarbz" and @methode!="rsync"&#41;
return "Methode muss rsync oder tarbz sein.";
end

if @zielvz.nil?
return "zielvz muss definiert sein";
end

if&#40; @quellvz.nil? &#41;
return "quellvz muss angegeben sein. Liste von Dateien/VZ";
end

if @zielrechner.nil? or &#40; @zielrechner !~ /^\w+@\w+/ &#41;
return "zielrechner muss format user@rehner haben";
end

if&#40; @tage1modul.nil? or @tage1halten.nil? &#41;
return "tage1modul und tage1halten mus mindestens definiert sein";
else
@tage1modul = @tage1modul.to_i;
@tage1halten = @tage1halten.to_i;
if @tage1modul == 0
return "tage1modul darf nicht 0 sein";
end
end

@tage2modul = @tage2modul.to_i;
@tage2halten = @tage2halten.to_i;
@tage3modul = @tage3modul.to_i;
@tage3halten = @tage3halten.to_i;

return nil;
end



def fuehre_aus&#40;&#41;
p self
case @methode
when "rsync"
rsync;
when "tarbz"
tarbz;
end
end



def tarbz&#40;&#41;
heute = Date.today;
@zielvz.chomp!&#40;"/"&#41;;
#puts "finde l&#31016;bares";
azu_loeschen = finde_zu_loeschendes&#40;&#41;;
umbenennen = "mv #&#123;@zielvz&#125;/#&#123;$AKTUELLE&#125;.tbz #&#123;@zielvz&#125;/#&#123;$PREFIX&#125;_#&#123;heute&#125;.tbz";
loeschen = "rm -rf #&#123;azu_loeschen&#125;";
#puts ">>ssh #&#123;zielrechner&#125; \"#&#123;umbenennen&#125; ; #&#123;loeschen&#125;\"";
system "ssh -x -o 'PasswordAuthentication=no' #&#123;zielrechner&#125; \"#&#123;umbenennen&#125; ; #&#123;loeschen&#125;\""; # umbennenen und l&#52387;hen
puts "tarbz mit ssh"
tarcmd = "tar cjf - #&#123;@quellvz&#125; | ssh -x -o 'PasswordAuthentication=no' -e none #&#123;zielrechner&#125; cat '>#&#123;@zielvz&#125;/#&#123;$AKTUELLE&#125;.tbz'";
#puts ">>#&#123;tarcmd&#125;";
system&#40; tarcmd &#41;;
end


def rsync&#40;&#41;
heute = Date.today;
if&#40; heute.jd % @tage1modul == 0&#41; then # heute kopieren?
kopierbefehl="ssh -x -oPasswordAuthentication=no #&#123;@zielrechner&#125; \"rm -fr #&#123;@zielvz&#125;/#&#123;$PREFIX&#125;_#&#123;heute.to_s&#125;; cp -al "+
" #&#123;@zielvz&#125;/#&#123;$AKTUELLE&#125; #&#123;@zielvz&#125;/#&#123;$PREFIX&#125;_#&#123;heute.to_s&#125;\"";
#puts&#40;kopierbefehl&#41;;
system&#40;kopierbefehl&#41;;
#puts&#40;"rsync --rsh='ssh -x -oPasswordAuthentication=no' -aqz --delete #&#123;@quellvz&#125; #&#123;@zielrechner&#125;&#58;#&#123;@zielvz&#125;/#&#123;$AKTUELLE&#125;"&#41;;
system&#40;"rsync --rsh='ssh -x -oPasswordAuthentication=no' -aqz --delete #&#123;@quellvz&#125; #&#123;@zielrechner&#125;&#58;#&#123;@zielvz&#125;/#&#123;$AKTUELLE&#125;"&#41;;
puts "rsync per ssh"
else
puts "heute ueberspringen";
end
azu_loeschen = finde_zu_loeschendes&#40;&#41;;
# puts "Deleted&#58; "+azu_loeschen.inspect;
#puts&#40;"ssh -o 'PasswordAuthentication=no' -x #&#123;@zielrechner&#125; rm -fr #&#123;azu_loeschen&#125;"&#41; if azu_loeschen.size>0;
system&#40;"ssh -x -oPasswordAuthentication=no #&#123;@zielrechner&#125; rm -fr #&#123;azu_loeschen&#125;"&#41; if azu_loeschen.size>0;
end


def finde_zu_loeschendes&#40;&#41;
heute = Date.today;
# daher erst alle dateinamen bekommen
einIO = IO.popen&#40;"ssh -x -oPasswordAuthentication=no #&#123;@zielrechner&#125; ls #&#123;@zielvz&#125;"&#41;;
#einIO.readlines #ist es. Da sind die sicherungsvz se drin
dateinamen = einIO.readlines;
einIO.close;
azu_loeschen = &#91;&#93;; # array der zu l&#52387;henden VZ
dateinamen.each do |nm|
nm.chomp!&#40;"\n"&#41;;
if&#40; nm =~ /#&#123;$PREFIX&#125;_&#40;\d+&#41;-&#40;\d+&#41;-&#40;\d+&#41;/ &#41; # gehe alle sicherungsVZ durch
begin
datum= Date.new&#40;$1.to_i, $2.to_i, $3.to_i&#41;;
diff = heute.jd - datum.jd;
loeschen = false;
#l&#32035;he, wenn das ding &#23412;er ist als in @tage1halten
if&#40; diff > @tage1halten &#41;
loeschen = true;
end
# aber doch nicht, wenn durch @tage2modul teilbar
if&#40; @tage2modul!=0 and datum.jd % @tage2modul == 0 &#41;
loeschen = false;
end
# doch wieder, wenn &#15092;er als in @tage2halten angegeben
if&#40; @tage2halten!=0 and diff > @tage2halten &#41;
loeschen = true;
end
# aber doch nicht, wenn ganzzahlid durch @tage3modul teilbar
if&#40; @tage3modul!=0 and datum.jd % @tage3modul == 0 &#41;
loeschen = false;
end
# doch wieder, wenn &#15092;er als in @tage2halten angegeben
if&#40; @tage3halten!=0 and diff > @tage3halten &#41;
loeschen = true;
end
# wenn mal was mit dem Datum war&#58; l&#52387;hen
if&#40; diff < 0 &#41;
loeschen = true;
end
rescue
puts "hups"
loeschen = true
end
# f&#63909; VZ-namen in die liste der zu l&#52387;henden VZ ein.
azu_loeschen.push&#40; nm &#41; if loeschen;
# puts "l&#52387;he"+nm if loeschen;
# puts "nichtl&#52387;hen"+nm if not loeschen;
end # if
end # each
# return dieses
azu_loeschen.collect! &#123; |vznm| " "+@zielvz+"/"+vznm &#125;
end

end

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



# stellt eine Verbindung zwischen den
# schl&#56627;elw&#31988;ern in der Datei und
# den symbolen der Elementvarialben dar bzw.
# deren mutatoren, die alle auf = enden.
BEZEICHNER = &#123; "JOB"=>nil, "methode"=>&#58;methode=, "zielrechner"=>&#58;zielrechner=,
"zielrechner"=>&#58;zielrechner=, "quellvz"=>&#58;quellvz=, "zielvz"=>&#58;zielvz=,
"tage1modul"=>&#58;tage1modul=, "tage1halten"=>&#58;tage1halten=, "tage2modul"=>&#58;tage2modul=,
"tage2halten"=>&#58;tage2halten=, "tage3modul"=>&#58;tage3modul=, "tage3halten"=>&#58;tage3halten=,
"JOB_END"=>nil &#125;;

$zeilennr=0;

# verarbeitet die einzelnen jobs
# im prinzip nix anderes als ein array
# &#55525;r einen hash in elementvariablen schreiben
def verarbeite&#40;job&#41;
myjob = SicherungsJob.new;
# felder setzen
job.each do |zuw|
md = &#40;zuw =~ /&#40;\w+&#41;\s*=\s*&#40;\S+&#41;/&#41;;
# puts "#&#123;md&#91;1&#93;&#125; &#58; #&#123;md&#91;2&#93;&#125;";

if md==nil then
puts "Verworrene Zeile&#58; \"#&#123;zuw&#125;\", ##&#123;$zeilennr&#125;";
return false;
end

if BEZEICHNER&#91; $1 &#93;==nil then
puts "nicht erlaubt&#58; \"#&#123;zuw&#125;\", ##&#123;$zeilennr&#125;";
return false;
end

if BEZEICHNER&#91; $1 &#93;.class == Symbol then
myjob.send&#40; BEZEICHNER&#91; $1 &#93;, $2 &#41;;
end
end
# fertig?
erg = myjob.verifiziere&#40;&#41;
if erg then
puts erg+", ##&#123;$zeilennr&#125;";
return false;
end
return myjob;
end


#
# Liest eine Datei &#40;datei&#41; ein
# und extrahiert daraus mithilfe von verarbeite&#40;&#41;
# die jobs die darin stehen.
def lese_ein&#40; datei &#41;
$zeilennr = 0;
unless File.exists?&#40; datei &#41;
puts "Datei existiert nicht&#58; '#&#123;datei&#125;'";
return false
end
f = File.new&#40; datei, "r+" &#41;;
puts "Verwende Datei '#&#123;datei&#125;'";
zustand = "nix";
until f.eof?
zeile = f.gets;
$zeilennr +=1;
zeile.chomp!; # no newline
zeile.gsub!&#40;/#.*/,""&#41;; # no comments
zeile.gsub!&#40;/^\s+/,""&#41;; # no leading white
zeile.gsub!&#40;/\s+$/,""&#41;; # no trailing white

next if zeile.length == 0;

if &#40;zustand=="nix"&#41; and zeile =~ /^JOB$/
zustand = "job";
job=&#91;&#93;;
next
end

if zustand=="job"
if zeile =~ /^ENDE$/
zustand="nix";
einJob = verarbeite&#40;job&#41;;
if einJob.class==SicherungsJob then
$SicherungsJobs.push&#40; einJob &#41;;
end
else
job.push&#40; zeile &#41;;
end
next
end
end
if zustand!="nix"
puts "unerwartetes Ende der Datei, ##&#123;$zeilennr&#125;";
end

# ok, dann f&#56552;e sie alle der Reihe nach aus
$SicherungsJobs.each &#123; |j| j.fuehre_aus&#40;&#41; &#125;;
true;
end


def geheAlleUserDurch&#40;&#41;
Users.new.each do |u|
if &#40;u.uid==0&#41; or &#40;u.uid>=500&#41; then
puts "========== f&#56480;"+u.name
# null jobs f&#56480;diesen nutzer
$SicherungsJobs = &#91;&#93;; # alle gelesenen Jobs landen dort
if &#40;u.dir.length >3&#41; and &#40;File.exist?&#40;u.dir&#41;&#41; then
Process.uid = u.uid; # uid nehmen
Process.gid= u.gid;
Dir.chdir&#40;u.dir&#41;;
konfigdatei= "#&#123;u.dir&#125;/.#&#123;$DATEI&#125;";
#puts "oeffne #&#123;konfigdatei&#125;";
lese_ein&#40; konfigdatei &#41;;
#puts "fertig mit "+u.name
end
end
end
end



############ Hauptprogramm #########################

if &#40;ARGV.size == 0&#41; then
# kein Argument
if Process.uid==0 then # Als root mache alle user
geheAlleUserDurch&#40;&#41;;
else # als normalo user
#lese_ein&#40; $DATEI &#41; ## +++ &#1890;erpr&#55781; das
end
else
# min ein Argument
lese_ein&#40; ARGV&#91;0&#93; &#41;;
end
[/code:1]
Wer meint Jemand zu sein hat aufgehört Jemand zu werden.