Bash Script Cron vs Console

Bash, Shell, PHP, Python, Perl, CGI
ckaos
Posts: 9
Joined: 2007-04-17 21:10
Location: Berlin

Bash Script Cron vs Console

Post by ckaos » 2010-10-28 08:38

Hi

ich habe ein kleines Bashscript geschrieben welches ein mysqldump erstellt
und es danach ala log-dateien nummeriert ablegen soll. Per Console funktioniert es wie es soll als cron überschreibt er lediglich die Datei(sqlbackup.sql).

Code: Select all

mysqldump -uUSER -pPASS DB > /var/www/PFAD/sqldump.sql
if [ -f /var/www/PFAD/sqldump.sql ]
then
   mv --backup=numbered /var/www/PFAD/sqldump.sql /var/www/PFAD/sqlbackup.sql
   echo "ok"
else
   echo "nich ok"
fi
if [ -f /var/www/PFAD/sqlbackup.sql.~7~ ]
then
   rm /var/www/PFAD/sqlbackup.sql.~7~
fi

Ich dachte ich hätte ein Pfad/Umgebungsproblem mit mv aber dann würde
er sie ja nichtmal überschreiben oder?

Was übersehe ich hier ...

mfg

CKaos

ckaos
Posts: 9
Joined: 2007-04-17 21:10
Location: Berlin

Re: Bash Script Cron vs Console

Post by ckaos » 2010-10-28 18:52

Hi

In welchem Verzeichnis befindest Du dich in der Console?Hast Du schon mal einen chdir ins Zielverzeichnis versucht.Also innerhalb des Scriptes zur Laufzeit?

Ich habe es sowohl als auch probiert funktioniert.
Als welcher Benutzer läuft es sowohl im cron als auch manuell?

Manuell als root und dem user unter dem der Cron läuft.

Das mit den verschiedenen mv schliesse ich aus da der Cron ja die Datei mit
mv umbenennt. Desweiteren gibt ein find */mv nur bin/mv aus.
Ich bin schon etwas ratlos...

mfg

CKaos

ckaos
Posts: 9
Joined: 2007-04-17 21:10
Location: Berlin

Re: Bash Script Cron vs Console

Post by ckaos » 2010-10-29 08:05

Hi

unglaublich aber wahr

Code: Select all

   /bin/mv --backup=numbered /var/www/PFAD/sqldump.sql /var/www/PFAD/sqlbackup.sql

ist die Lösung, danke @matzewe01
Fragt man sich nur warum das so is....

Sofern Du eine tägliche Sicherung damit erreichen wolltest, mit einer Vorhaltezeit von einer Woche:

Dann liese sich sicherlich auch der Wochentag verwenden und würde automatisch überschrieben.

Nun habe ich nur ein Codeschnipsel gezeigt, neben dem SQL werden noch andere
dinge gespeichert gepackt und dann wie du schon richtig erkannt hast 7 mal
archiviert >7 wird gelöscht.

Warum kein Datum?
Weil es ein anderes Script gibt welches bis zu 7 Schritten das zurücksetzen
erlaubt und der cron aber nicht täglich sondern alle 30min läuft.

mfg

CKaos
Last edited by ckaos on 2010-10-29 08:06, edited 1 time in total.

ckaos
Posts: 9
Joined: 2007-04-17 21:10
Location: Berlin

Re: Bash Script Cron vs Console

Post by ckaos » 2010-10-29 09:32

Hi

natürlich nicht -.- hab ich wohl was flasch verstanden ;)
Es sollte schon so sein das er das neueste in ~1~ und das älteste
in ~7~ welches er dann löscht. Hast du ne idee wie ich das ohne
mehrere Schleifen ala

Code: Select all

##archivfile erstellen
for i in 6 5 4 3 2 1; do
   if [ -f /var/www/PFAD/archivfile.~$i~ ]
   then
      
      /bin/mv /var/www/PFAD/archivfile.~$i~ /var/www/PFAD/archivfile.~$[$i+1]~
   fi
done
if [ -f /var/www/PFAD/archivfile ]
then
   /bin/cp /var/www/PFAD/archivfile /var/www/PFAD/archivfile.~1~
fi

lösen kann?

mfg

CKaos

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Bash Script Cron vs Console

Post by Roger Wilco » 2010-10-29 10:08

Ich würde auch einen Timestamp als Namenserweiterung nutzen (`date +"%s"` oder `date +"%Y%m%d%H%M%S"`) und die alten Verzeichnisse mit mit `find -ctime $MAX_AGE -type d -delete` löschen.