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: | 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): | 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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12987
|
muku1 schrieb: | 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?
| 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: | 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?
| 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:
| Code:
sudo -u postgres pg_dump dbname | gzip > /home/ubuntu/dbBackup.sql.gz
|
|
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:
| Code:
-bash: syntax error near unexpected token `('
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12987
|
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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12987
|
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
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
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12987
|
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
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
|