awk macht unterschiedliche Ausgaben console/cronjob

kalleplom

Registered User
Hi!

Eins vorweg: Ich bin sicher, dass meine Vorgehensweise nicht die intellenteste
ist.. :)
Ich beschreibe also mein Problem und nebenbei frage ich mal, was ihr von der Systematik haltet.. ich bin ja auch nur HTML Programmierer. :rolleyes:

Ich hab mir ein bash-backup-script zusammengebastelt, dass allemöglichen Webserverdaten sichern soll. Das htdocs Verzeichnis, die MySQL Datenbanken, apache-config, etc.

System ubuntu 10.4, apache 2.2 mysql 5.1(?)

Hab mir also eine Routine geschrieben, die wie folgt aussieht:

Code:
echo "Dump: databases" 
DIRS=`ls -l /var/lib/mysql | awk '{
	if( $1 ~/^drwx/ ){
		print $8
	}
}'`

for keys in ${DIRS}
	do
	dt=`date +%Y-%m-%d-%H%M`
	`mysqldump ${keys} --quote-names --allow-keywords --complete-insert -u root --password=${mr} | bzip2 > /bak/database/${dt}-${keys}.sql.bz2`
	`ncftpput -R -u ${fuser} -p ${fpass} ftpserver.com /bak/database /bak/database/${dt}-${keys}.sql.bz2`
done

Das macht also anhand der Verzeichnisse im MySQL Datadir dumps von der jeweiligen DB, packt den kram, speichert ihn lokal zwischen und schiebt ihn dann per FTP auf den entsprechenden Server. rsync auf ein ftpfs gemountetes verzeichnis hatte damals auf debian noch funktioniert.. aber das ist ein anderes Problem.

Das eigentliche Problem ist: Die Liste, die per ls -l ausgegeben wird sieht auf der Konsole anders aus, als die, die per cronjob ausgeführt wird.

Wenn ich das Script in putty aufrufe funktioniert es so, wie ich mir das denke.
Die Verzeichnisnamen werden richtig herausgelesen. Der cronjob aber nutzt dann nicht den Verzeichnisnamen sondern das Datum(!). Als würde per cron das ls eine andere Ausgaben mache als ein Direktaufruf.

Als mein Server noch mit debian lief, funktionierte das alles wunderbar.

Nur hier eben nicht mehr.

Könnt ihr mir noch helfen?

grüße
 
Danke! Diese Antwort habe ich erwartet :)

Klar geht das auch so. Nur was ist bei den Verzeichnissen:

/var/www/website.xs
/var/www/website.yz

Und was, wenn einzelne Dateien auch so behandelt werden sollen. SVN Verzeichnis-Dumbs sind auch mit bei... configs, etc...
 
Und was, wenn einzelne Dateien auch so behandelt werden sollen. SVN Verzeichnis-Dumbs sind auch mit bei... configs, etc...
Dann verwendest du `find` statt deines Konstruktes mit `ls` und `awk`.

Der Grund für unterschiedliche von `ls` bei dir ist, dass sich das Environment (speziell die gesetzten Umgebungsvariablen) bei der Ausführung via Cron von der via interaktiver Shell unterscheidet. So wird z. B. die Standard Locale verwendet, statt die von dir eingestellte, was natürlich die Ausgabe aller Programme beeinflusst, welche die Locale beachten.
 
Back
Top