Batch Datei erstellen Consolen Befehl
Batch Datei erstellen Consolen Befehl
Hallo zusammen,
ich versuche seit ein paar Stunden, leider vergebens eine ausführbare Datei zu erstellen
die ich dann mittels Cronjob täglich ausführen lassen kann...
Normalerweise gebe ich immer per Hand in die Console ein:
su postgres
pg_dump -Fc davical >/daten/davicalxx.xx.xx.pgdump
xx.xx.xx steht immer für das aktuelle Datum
Das jeden Tag selbst zu einzugeben, macht nicht wirklich Spaß
Was muss ich dafür in meine Datei backup.command schreiben
damit es funktioniert? Bin langsam am verzweifeln...
ich versuche seit ein paar Stunden, leider vergebens eine ausführbare Datei zu erstellen
die ich dann mittels Cronjob täglich ausführen lassen kann...
Normalerweise gebe ich immer per Hand in die Console ein:
su postgres
pg_dump -Fc davical >/daten/davicalxx.xx.xx.pgdump
xx.xx.xx steht immer für das aktuelle Datum
Das jeden Tag selbst zu einzugeben, macht nicht wirklich Spaß
Was muss ich dafür in meine Datei backup.command schreiben
damit es funktioniert? Bin langsam am verzweifeln...
Re: Batch Datei erstellen Consolen Befehl
Einfach mal mit man date schauen, welches Format du gerne hättest und dann einfach diesen Befehl in einer Variablen speichern und an der entsprechenden Stelle im Skript einfügen.
Beispiel:
Beispiel:
Code: Alles auswählen
# > DATUM=$(date '+%d.%m.%Y %H:%M')
# > echo $DATUM
05.03.2009 09:39
Oh, yeah!
Re: Batch Datei erstellen Consolen Befehl
Hi, danke für die schnelle Antwort
da ich noch nicht wirklich viel damit gemacht habe kann ich dir noch nicht ganz folgen.
Also erstes Problem wäre überhaupt erstmal ein Script anlegen
welches die Datei täglich abspeichert,
dazu kommt dann das wenn möglich nicht immer der selbe Dateiname erstellt
wird sondern möglichst mit Datum dabei.
Was sollte dann in der Datei stehen:
#!/bin/sh
# > DATUM=$(date '+%d.%m.%Y %H:%M')
# > echo $DATUM
su postgres
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
da ich noch nicht wirklich viel damit gemacht habe kann ich dir noch nicht ganz folgen.
Also erstes Problem wäre überhaupt erstmal ein Script anlegen
welches die Datei täglich abspeichert,
dazu kommt dann das wenn möglich nicht immer der selbe Dateiname erstellt
wird sondern möglichst mit Datum dabei.
Was sollte dann in der Datei stehen:
#!/bin/sh
# > DATUM=$(date '+%d.%m.%Y %H:%M')
# > echo $DATUM
su postgres
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
Re: Batch Datei erstellen Consolen Befehl
Dein Ansatz ist schonmal nicht schlecht. Wie wäre es damit?:
Das erzeugt eine Datei nach dem Schema in deinem ersten Post. Ich finde YY.MM.DD sinnvoller als andersrum. Wenn du das anders siehst, vertausche einfach %y und %d.
Das Script machst du jetzt noch ausführbar:
Mit Postgres habe ich zuletzt vor zwei Jahren gearbeitet. Ich weiß nicht mehr, wie es dort mit der Passwortabfrage bei der Anmeldung des Users war. Das könnte dir im Script auf die Füße fallen. Wenn du das Script direkt als User postgres ausführst, kannst du dir die su-Zeile sparen.
Wenn du einen Cron für den User Postgres erstellst brauchst du die Anmeldung ohnehin nicht.
Code: Alles auswählen
#!/bin/sh
su postgres
DATUM=$(date'+%y.%m.%d')
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
Das Script machst du jetzt noch ausführbar:
Code: Alles auswählen
chmod u+x SCRIPTNAME
Wenn du einen Cron für den User Postgres erstellst brauchst du die Anmeldung ohnehin nicht.
Re: Batch Datei erstellen Consolen Befehl
Mit dem Datum hats du recht das schaut wie von dir vorgeschlagen besser aus...
Also diese DB Sicherung führe ich immer manuell mit als root eingeloggt aus.
Mit dem Skript scheint es da dann wohl ein Problem zu geben.
Habe es eben einfach mal als root mit ausgeführt
und dann kam
leider nichts weiter sonst passiert...
Und als postgres user ausführen wie funktioniert das, also
wie stelle ich ein das er das skript als ein bestimmte user ausführt?
btw: lustiges Avatar
Also diese DB Sicherung führe ich immer manuell mit
Code: Alles auswählen
su postgres
Mit dem Skript scheint es da dann wohl ein Problem zu geben.
Habe es eben einfach mal als root mit
Code: Alles auswählen
./davicalbackup.command
und dann kam
Code: Alles auswählen
server:/etc/cron.daily# ./davicalbackup.command
postgres@server:/etc/cron.daily$
Und als postgres user ausführen wie funktioniert das, also
wie stelle ich ein das er das skript als ein bestimmte user ausführt?
btw: lustiges Avatar
Re: Batch Datei erstellen Consolen Befehl
Bau das Skript so, dass es nur den Dateinamen baut und pg_dump aufruft, kein su.
Dann fügst du das Skript in /etc/crontab ein:
Dadurch wird um 6 Uhr täglich dein Skript unter dem User postgres gestartet.
Dann fügst du das Skript in /etc/crontab ein:
Code: Alles auswählen
0 6 * * * postgres /dein/backup/script
Re: Batch Datei erstellen Consolen Befehl
Mit su dürfte es wirklich nicht funktionieren, denn nach dem su bist bist du ja in einer Shell die postgres gehört. Das Script läuft aber in einer root-Shell. Also entwedr machst du das mit sudo oder besser so, wie von nepos vorgeschlagen.
btw: Hab ich gemacht Foto von mich selbst nach teuer Inspektion von User yeti.
btw: Hab ich gemacht Foto von mich selbst nach teuer Inspektion von User yeti.
Re: Batch Datei erstellen Consolen Befehl
Danke für eure Erklärung, ist absolut nachvollziehbar das es so nicht tun kann
Hab das Script jetzt so
abgelegt und den Eintrag entsprechend deiner Vorgabe in der crontab Datei gemacht.
Bin gespannt ob es dann morgen früh läuft und eine Sicherung passietr ist.
Wann müsste er die denn machen?
Vielen Dank erstmal für die super Unterstützung!
Hab das Script jetzt so
Code: Alles auswählen
#!/bin/sh
DATUM=$(date'+%y.%m.%d')
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
Bin gespannt ob es dann morgen früh läuft und eine Sicherung passietr ist.
Wann müsste er die denn machen?
Vielen Dank erstmal für die super Unterstützung!
Re: Batch Datei erstellen Consolen Befehl
Ich wüde zum Testen mal den crontab-Eintrag auf 13:10 Uhr oder so setzen.
Hier die Erklärung der einzelnen Spalten (aus man 5 crontab):
Das Beispiel von nepos bezieht sich also auf 06:00 Uhr morgens jeden Tag.
Hier die Erklärung der einzelnen Spalten (aus man 5 crontab):
Code: Alles auswählen
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
Oh, yeah!
Re: Batch Datei erstellen Consolen Befehl
Doch, mit su gehts auch. Dafür hat es die Option -c:hikaru hat geschrieben:Mit su dürfte es wirklich nicht funktionieren, denn nach dem su bist bist du ja in einer Shell die postgres gehört.
Code: Alles auswählen
su - -c id
Password: .....
uid=0(root) gid=0(root) groups=0(root)
Re: Batch Datei erstellen Consolen Befehl
Guten morgen
Also mit dem Script so
hat es leider nicht geklappt da kein dump abgelegt wurde...
Wie von dir beschrieben wartet er mit der ersten Scriptversion in der Shell auf Eingaben...
Um es mit su- -c id auszuführen müsste es dann so aussehen?
Das Passwort muss dann im Klartext in der Datei stehen?
Also mit dem Script so
Code: Alles auswählen
#!/bin/sh
DATUM=$(date'+%y.%m.%d')
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
Wie von dir beschrieben wartet er mit der ersten Scriptversion in der Shell auf Eingaben...
Um es mit su- -c id auszuführen müsste es dann so aussehen?
Das Passwort muss dann im Klartext in der Datei stehen?
Code: Alles auswählen
#!/bin/sh
su - -c root
Password: XYZ123
DATUM=$(date'+%y.%m.%d')
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
Re: Batch Datei erstellen Consolen Befehl
Zum Testen das Skript ausführbar machen (chmod +x <script>) und es anschließend mit ./sciptname ausführen.
Wenn das funktioniert, dass Skript in die crontab aufnehmen und als Zeit in 10 Minuten oder wählen und kontrollieren. Bei der Ausführung in der crontab kann es schon mal zu Problemen aufgrund des Environments kommen.
Wenn das funktioniert, dass Skript in die crontab aufnehmen und als Zeit in 10 Minuten oder wählen und kontrollieren. Bei der Ausführung in der crontab kann es schon mal zu Problemen aufgrund des Environments kommen.
Oh, yeah!
Re: Batch Datei erstellen Consolen Befehl
Du warst schneller als ich
Habe genau das gerade getestet unn wollte es posten...
Hab mich als postgres eingeloggt und das script ausgeführt, da kam folgende Meldung:
/usr/local/bin/script/davicalbackup.command: line 3: date+%y.%m.%d: command not found
/usr/local/bin/script/davicalbackup.command: line 4: /daten/davical.pgdump: Keine Berechtigung
Habe genau das gerade getestet unn wollte es posten...
Hab mich als postgres eingeloggt und das script ausgeführt, da kam folgende Meldung:
Code: Alles auswählen
#!/bin/sh
DATUM=$(date'+%y.%m.%d')
pg_dump -Fc davical >/daten/davical$DATUM.pgdump
/usr/local/bin/script/davicalbackup.command: line 4: /daten/davical.pgdump: Keine Berechtigung
Re: Batch Datei erstellen Consolen Befehl
Der erste Fehler liegt am fehlenden Leerzeichen zwischen date und '+%y....
Der Zweite sieht stark nach fehlenden Schreibrechten im Zielordner aus.
Der Zweite sieht stark nach fehlenden Schreibrechten im Zielordner aus.
Re: Batch Datei erstellen Consolen Befehl
zu 1) Der date-Befehl ist falsch, er sollte so aussehen: DATUM=$(date +'%y.%m.%d')
zu 2) Laut Fehlermeldung hast du in dem Verzeichnis /daten keine Schreibrechte.
[edit]
Da war jemand schneller...
[/edit]
zu 2) Laut Fehlermeldung hast du in dem Verzeichnis /daten keine Schreibrechte.
[edit]
Da war jemand schneller...
[/edit]
Oh, yeah!
Re: Batch Datei erstellen Consolen Befehl
Suuuper, es läuft
Nach beheben der beiden Fehler tut es nun wenn ich die Datei selbst ausführen als postgres,
und auch über den cronjob, eben getestet... Echt klasse!
Vielen Dank für den super Support!
Es tut nun zwar alles aber rein aus neugier,
die Idee mit dem su - -c id hatte ich nicht ganz verstanden und ich kann auch keine Beschreibung dazu
finden was dieser Befehl genau macht und wie er funktioniert?
Nach beheben der beiden Fehler tut es nun wenn ich die Datei selbst ausführen als postgres,
und auch über den cronjob, eben getestet... Echt klasse!
Vielen Dank für den super Support!
Es tut nun zwar alles aber rein aus neugier,
die Idee mit dem su - -c id hatte ich nicht ganz verstanden und ich kann auch keine Beschreibung dazu
finden was dieser Befehl genau macht und wie er funktioniert?
Code: Alles auswählen
su - -c id
Password: .....
uid=0(root) gid=0(root) groups=0(root)
Re: Batch Datei erstellen Consolen Befehl
Das war nur ein Beispiel, wie man su mittels -c Kommandos übergibt
Sorry, id war hier wohl als Befehl etwas verwirrend. Man hätte auch su -c ls machen können, aber da sieht ja keiner, dass das als root ausgeführt wird
Für deinen Zweck ist die Lösung ohne su -c eh besser. Wenn man da aufwendigere Kommandos reinpackt, kann man leicht über das teilweise nötige Escaping von Zeichen für die Shell stolpern...
Sorry, id war hier wohl als Befehl etwas verwirrend. Man hätte auch su -c ls machen können, aber da sieht ja keiner, dass das als root ausgeführt wird
Für deinen Zweck ist die Lösung ohne su -c eh besser. Wenn man da aufwendigere Kommandos reinpackt, kann man leicht über das teilweise nötige Escaping von Zeichen für die Shell stolpern...