ubuntuusers.de

cronjob für postgreSQL backup

Status: Gelöst | Ubuntu-Version: Server 10.04 (Lucid Lynx)
Antworten |

muku1

Anmeldungsdatum:
1. Juni 2012

Beiträge: Zähle...

Hallo zusammen,

ich würde gerne Cronjob starten, der jede Nacht um 3 Uhr ein Backup der db schreibt.

Manuell klappt dies mit folgendem Befehl wunderbar:

1
2
3
4
Code:


sudo -u postgres pg_dump dbname | gzip > /pfad/dbBackupName.sql.gz

Was noch nicht klappt ist der Cronjob. Ich habe es folgendermaßen versucht (/etc/crontab):

1
2
3
4
Code:

#  m  h  dom  mon  dow  user             command
   0  3    *   *    *   postgres         pg_dump | dbname | gzip > /pfad/dbBackupName.sql.gz

Ich hoffe jemand kann mir da helfen.

Viele Grüße muku

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

muku1 schrieb:

1
sudo -u postgres pg_dump dbname | gzip > /pfad/dbBackupName.sql.gz

Was noch nicht klappt ist der Cronjob. Ich habe es folgendermaßen versucht (/etc/crontab):

Was genau passiert? Gibt es Fehlermeldungen?

1
2
3
4
Code:

#  m  h  dom  mon  dow  user             command
   0  3    *   *    *   postgres         pg_dump | dbname | gzip > /pfad/dbBackupName.sql.gz

Da ist ein Pipe-Symbol mehr als in Deiner Kommandozeilenvariante. Vielleicht ist das schon das Problem.

Hast Du den manuell eingetragen? Möglicherweise hat crond das dann noch nicht mitbekommen. Ich mache es eigentlich immer über crontab -e - in Deinem Fall also sudo -u postgres crontab -e.

Generell sind auch Pfade ($PATH) immer ein Thema bei cron.

Ciao

robert

muku1

(Themenstarter)

Anmeldungsdatum:
1. Juni 2012

Beiträge: 19

rklm schrieb:

muku1 schrieb:

1
sudo -u postgres pg_dump dbname | gzip > /pfad/dbBackupName.sql.gz

Was noch nicht klappt ist der Cronjob. Ich habe es folgendermaßen versucht (/etc/crontab):

Was genau passiert? Gibt es Fehlermeldungen?

1
2
3
4
Code:

#  m  h  dom  mon  dow  user             command
   0  3    *   *    *   postgres         pg_dump | dbname | gzip > /pfad/dbBackupName.sql.gz

Da ist ein Pipe-Symbol mehr als in Deiner Kommandozeilenvariante. Vielleicht ist das schon das Problem.

Hast Du den manuell eingetragen? Möglicherweise hat crond das dann noch nicht mitbekommen. Ich mache es eigentlich immer über crontab -e - in Deinem Fall also sudo -u postgres crontab -e.

Generell sind auch Pfade ($PATH) immer ein Thema bei cron.

Ciao

robert

Hallo robert das war ein Tippfehler von mir hier im post. Ist natürlich nur mit einem pipe-symbol, unswa nach <dbname>. Fehlermeldungen konnte ich keine beobachten. Aber falls es welche geben sollte, wo sollte ich da nachschauen??? Ich habe es mit sudo -u postgres crontab -e noch nicht probiert. Aber muss das Backup nicht mit sprechenden Rechten gestartet werden?

Was genau ist bei den Pfaden zu beachten bei cron?

Viele Grüße muku

u1000

Anmeldungsdatum:
2. Oktober 2011

Beiträge: 1850

cron Kommandos laufen komplett ohne path und weitere Umgebungsvariablen.

Benutze also absolute Pfade für pg_dump, gzip usw. und prüfe ggf. welche Variablen (LANG usw) vorher gesetzt werden müssen.

muku1

(Themenstarter)

Anmeldungsdatum:
1. Juni 2012

Beiträge: 19

oh ich glaube das ist ein Missverständnis. Es sind hier keine Variablen gesetzt! Der Pfad geht auf /home/ubuntu/dbBackup.sql.gz

Auch hier sind keine Variablen in Benutzung:

1
2
Code:
sudo -u postgres pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

muku1 schrieb:

... Es sind hier keine Variablen gesetzt!

Genau das könnte das Problem sein !
(Genau genommen könnte da in $PATH was fehlen, wenn Du es mit cron ausführst)

Probier mal:

env -i sudo ( pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz )

Das entspräche im Terminal dem, was Du im Moment in Deinem cron stehen hast ...

Du kannst Dir ja mal die Fehlermeldungen ansehen (und ggf. posten).

LG,

track

muku1

(Themenstarter)

Anmeldungsdatum:
1. Juni 2012

Beiträge: 19

track schrieb:

muku1 schrieb:

... Es sind hier keine Variablen gesetzt!

Genau das könnte das Problem sein ! (Genau genommen könnte da in $PATH was fehlen, wenn Du es mit cron ausführst)

Probier mal:

env -i sudo ( pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz )

Das entspräche im Terminal dem, was Du im Moment in Deinem cron stehen hast ...

Du kannst Dir ja mal die Fehlermeldungen ansehen (und ggf. posten).

LG,

track

Hallo track, also erstmal fehlt bei dir wohl noch das ausführen des Befehls als user "postgres".

Zum Anderem meckert an den Klammern:

1
2
Code:
-bash: syntax error near unexpected token `('

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

Bitte etwas selektiver Quoten. Danke!

muku1 schrieb:

Fehlermeldungen konnte ich keine beobachten. Aber falls es welche geben sollte, wo sollte ich da nachschauen???

Der Benutzer postgres bekommt normalerweise eine Mail (wenn Dein System einen MTA hat). Ansonsten bieten sich immer die Dateien in /var/log an.

Ich habe es mit sudo -u postgres crontab -e noch nicht probiert. Aber muss das Backup nicht mit sprechenden Rechten gestartet werden?

Was sind "sprechende" Rechte? sudo -u postgres crontab -e editiert die crontab vom Benutzer postgres.

Was genau ist bei den Pfaden zu beachten bei cron?

Siehe die anderen Antworten.

Ciao

robert

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

rklm schrieb:

sudo -u postgres crontab -e editiert die crontab vom Benutzer postgres.

PS: Du kannst natürlich auch sudo crontab -u postgres -e machen - das kommt aufs Gleiche hinaus.

muku1

(Themenstarter)

Anmeldungsdatum:
1. Juni 2012

Beiträge: 19

Moderiert von rklm:

Bitte nicht ständig alte Artikel überarbeiten! Du hast bereits 6 Versionen dieses Artikels erzeugt. Da bekommt niemand mehr mit, wenn und was sich etwas ändert.

Ja eine Mail hab ich bei dem cronjob aber nicht bekommen. Auch sonst keinerlei Fehler festzustellen

Ich hab mal spasseshalber sudo -u postgres crontab -e probiert, hab anschließend dort den cronjob versucht zu starten zu starten.


Als Ergänzung zu meinen 1. Beitrag:

Als Shell variable ist folgendes eingetragen:

SHELL=/bin/bash

Als PATH Variable:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin


//edit: als ich den cronjob für den user postgres ausgeführt habe hab ich unter /var/mail die Entdeckung gemacht das der user "postgres" nicht in das Home-Verzeichnis von ubuntu schreiben darf (was ne Neuigkeit ^^). Sonst stand nichts drin. ☹

u1000

Anmeldungsdatum:
2. Oktober 2011

Beiträge: 1850

muku1 schrieb:

Was genau ist bei den Pfaden zu beachten bei cron?

Du kannst in deiner Befehlszeile nicht nur einfach gzip benutzen, sondern musst den kompletten Pfad zu dem Programm angeben. Den Pfad z.B. für gzip bekommst du mit

which gzip

In meinem System liegt das hier /bin/gzip und genau so musst du es dann im cron job auch aufrufen. Das gleiche gilt für alle Programme in deiner Befehlszeile.

//EDIT: sehe gerade, dass dies durch deine PATH Zeile schon ok sein müsste:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

muku1 schrieb:

//edit: als ich den cronjob für den user postgres ausgeführt habe hab ich unter /var/mail die Entdeckung gemacht das der user "postgres" nicht in das Home-Verzeichnis von ubuntu schreiben darf (was ne Neuigkeit ^^). Sonst stand nichts drin. ☹

Schüchterne Frage: hat der User "postgres" denn Schreibrechten auf /home/ubuntu/ ?

Denn bei Deiner Kommandozeilenversion hast Du das packen und wegschreiben ja unter Deinen eigenen Userrechten gemacht.
(darum hatte ich oben alles nach dem sudo auch in einen gemeinsamen Prozess gekapselt. Ich hatte es allerdings nicht getestet.
→ mit explizitem Shellaufruf sollte es jedenfalls funktionieren: env -i sudo -u postgres bash -c 'pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz' )

LG,

track

muku1

(Themenstarter)

Anmeldungsdatum:
1. Juni 2012

Beiträge: 19

track schrieb:

muku1 schrieb:

//edit: als ich den cronjob für den user postgres ausgeführt habe hab ich unter /var/mail die Entdeckung gemacht das der user "postgres" nicht in das Home-Verzeichnis von ubuntu schreiben darf (was ne Neuigkeit ^^). Sonst stand nichts drin. ☹

Schüchterne Frage: hat der User "postgres" denn Schreibrechten auf /home/ubuntu/ ?

Nein keine Berechtigung. Hatte es zwischenzeitlich an anderer Stelle probiert (/opt). Aber auch dort hatte der user postgres auch keine Berechtigung wie sich herausgestellt hat.

Denn bei Deiner Kommandozeilenversion hast Du das packen und wegschreiben ja unter Deinen eigenen Userrechten gemacht.
(darum hatte ich oben alles nach dem sudo auch in einen gemeinsamen Prozess gekapselt. Ich hatte es allerdings nicht getestet.
→ mit explizitem Shellaufruf sollte es jedenfalls funktionieren: env -i sudo -u postgres bash -c 'pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz' )

Nachdem ich den Befehl ausprobiert habe (allerdings ohne die ( - Klammer am Ende ), bekam ich den Fehler das keine Berechtigung zum Schreiben vergeben sind. Also hab ich einen Ordner auf / angelegt und entsprechende Berechtigung vergeben. Danach klappte es wunderbar. In der cron jedoch funktioniert es leider immer noch nicht. Keinerlei Fehlermeldungen oder der gleichen.

Noch irgendwelche Lösungsvorschläge?

Viele Grüße muku

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13177

muku1 schrieb:

In der cron jedoch funktioniert es leider immer noch nicht. Keinerlei Fehlermeldungen oder der gleichen.

Noch irgendwelche Lösungsvorschläge?

Häng doch mal folgendes an die Zeile an "2>> /tmp/backuplog" und schau, was in der Datei steht.

Ciao

robert

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

muku1 schrieb:

Nachdem ich den Befehl ausprobiert habe (allerdings ohne die ( - Klammer am Ende ), bekam ich den Fehler das keine Berechtigung zum Schreiben vergeben sind.

Na ja, wenn er eine Datensicherung anlegen soll, musst Du ihm schon die Schreibrechte geben, dort wo er hinschreiben soll ... 🐸

angelegt und entsprechende Berechtigung vergeben. Danach klappte es wunderbar. In der cron jedoch funktioniert es leider immer noch nicht. Keinerlei Fehlermeldungen oder der gleichen.

Die Fehlermeldungen landen bei cron sonstwo, im Nirvana oder so ...
- deshalb hatte ich Dir ja geraten exakt den Befehl, wie er im cron steht, mal mit env -i zu testen, damit Du die Fehlermeldungen siehst.
Edit: Der Vorschlag von Robert ist gut ! → damit fängst Du die Fehlermeldungen in einer Datei auf.

Hattest Du den Befehl exakt so getestet, wie er im cron steht ?

track

Antworten |