Docker Befehl im Scheduler ausführen

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

auf meiner DS220+ betreibe ich 5 Docker Container. Einer davon ist ein InfluxDB Host.
Ich möchte gerne automatisch einmal am Tag die Datenbank sichern.
Dazu habe ich mir ein Task mit einem benutzerdefinierten Script im Scheduler erstellt:
Code:
sudo docker exec -it influxdb influx backup /home/backup -t <meinToken>

Den führe ich als root aus. Leider funktioniert der Code im Scheduler nicht. Wenn ich ihn auf der Konsole im Container ausführe, klappt die Sicherung.
Habs nicht nur als root sondern auch mit meinem Benutzer versucht, mit sudo und auch ohne.
Was mache ich falsch?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.405
Punkte
564
Schalte mal das Logging ein, indem du einen Ordner dort hinterlegst:
33.png
 
  • Like
Reaktionen: hennerich

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.831
Punkte für Reaktionen
855
Punkte
154
Mal probiert statt docker /usr/local/bin/docker zu verwenden? Könnte mir vorstellen, dass er den PATH anders gesetzt hat als im Terminal.
Das sudo kannst du ja weg lassen wenn du als user root wählst. Ansonsten wie @plang.pl geschrieben hat erstmal die Logs sichern und gucken was ihm nicht passt.
 

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
danke euch für die schnellen Antworten, das teste ich nachher gleich mal

Viele Grüße
Henri
 

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
Schalte mal das Logging ein, indem du einen Ordner dort hinterlegst:

Ahhh, cool, dass man dort mehr Informationen bekommt als wenn man Infos per E-Mail versendet. Danke für den Tipp!
Dort steht nämlich:
Code:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/influxdb/json": dial unix /var/run/docker.sock: connect: permission denied

Die ganzen Container habe ich mit einem benutzerdefinierten Script installiert, in dem auch "docker run..." vorkam. Warum hat denn mein Backup Script keine Berechtigungen?

Grüße
Henri
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.405
Punkte
564
Hast du als Benutzer bei der Aufgabe sicher root ausgewählt?
Und kannst du den Befehl per ssh fehlerfrei ausführen?
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.405
Punkte
564

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
...warte mal, ich hab einen Fehler gemacht. Jemand aus dem ioBroker Forum (dort hatte auch keiner eine zündende Idee) meinte, ich soll nicht root nehmen sondern meinen Benutzer. Den hatte ich gestern noch eingestellt.
Jetzt hab ich das Script noch mal als root ausgeführt und da kommt folgende Fehlermeldung:
Code:
the input device is not a TTY

Sorry für die Verwirrung!
 

plang.pl

Benutzer
Contributor
Sehr erfahren
Mitglied seit
28. Okt 2020
Beiträge
15.028
Punkte für Reaktionen
5.405
Punkte
564
Ich mache bei mir via Aufgabenplaner ein Backup der mariadb. Funktioniert einwandfrei.
Sicher, dass du oben den richtigen Befehl verwendest?
Und den Tipp mit dem "homes" mal umgesetzt?
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
Da der ganze Docker Befehl von einem Script ausgeführt ist benötigt man kein "interaktives pseudo tty".

Probiere das mal bitte ohne den Parameter "-it" aus.

Ich selbst erstelle automatische mysql backups mit dieser Zeile: (da sind zusätzlich noch ein paar Variablen die ich benutze drin)
Code:
docker exec -e MYSQL_PWD=$MYSQL_PWD \
mysqlcontainer /usr/bin/mysqldump -u root --databases databasename1 databasename2 databasename3 \
 | gzip > $BACKUPDIR/mysqlcontainer-$MYSQL_DATABASE-$TIMESTAMP.sql.gz


ggf. ohne das "t", ich kenne deinen Container nicht, und weiß nicht ob er das "interactive" benötigt, weil der Container ja die ganze Zeit läuft.


Code:
sudo docker exec -i influxdb influx backup /home/backup -t <meinToken>
sudo docker exec influxdb influx backup /home/backup -t <meinToken>
 
Zuletzt bearbeitet:
  • Like
Reaktionen: hennerich

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
Hallo,

der entscheidende Hinweis war das Weglassen des -it. Hatte mir die MAN Page von docker exec noch mal angeschaut und bin mir nicht sicher, ob ich nun -i brauche oder nicht.
Ohne beide Schalter geht es jedenfalls, das Backup wird erstellt und in meinen gemounteten Order geschrieben.
Der wird jetzt zyklisch nachts von meinem DS220+ auf ein DS120j mittels Hyper Backup übertragen.
Jetzt muss ich nur noch ein Lösch-Script bauen, welches die alten Backupfiles aus dem Home wieder löscht.
 

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
Code:
find /home/backup -name "backupname" -daystart -mtime +14 -delete

Löscht Backup Dateien mit dem Namen "backupname" im Verzeichnis /home/backup älter als 14 Tage.....
 
  • Like
Reaktionen: hennerich

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
Warte mal, das InfluxDB Backup erstellt sowas hier:
1676127069197.png

Wie würdest du das umsetzen?
 
Zuletzt bearbeitet von einem Moderator:

DrDeath

Benutzer
Mitglied seit
31. Aug 2018
Beiträge
203
Punkte für Reaktionen
90
Punkte
34
Wenn das der absolute Pfad ist:

/volume1/docker/influxbackup (wenn nicht, bitte anpassen)


Code:
find /volume1/docker/influxbackup -name "*.tar.gz" -daystart -mtime +14 -delete

Zum testen könntest du dich per ssh auf deine Synology verbinden und im Terminal den leicht abgewandelten Befehl:

Code:
find /volume1/docker/influxbackup -name "*.tar.gz" -daystart -mtime +14 -print

eingeben.

Der letzt genannte Befehl listet nur die Dateien auf, die er "löschen" würde, wenn anstelle des Parameters "-print", "-delete" verwendet wird.
 
  • Like
Reaktionen: hennerich

hennerich

Benutzer
Mitglied seit
10. Feb 2023
Beiträge
9
Punkte für Reaktionen
0
Punkte
1
Hey,

ich hatte es mir einfach gemacht, im Container unter /home den Ordner backup angelegt und den dann auf einen Ordner auf den NAS gemountet:
1676128036651.png

Jetzt beim näher überlegen frage ich mich, ob beim Neubauen des Containers der Backup Ordner noch existiert oder dann wieder nur ein /home
Achne, du machst das ja direkt im Ordner auf dem NAS. Verstanden. Probiere ich mal aus.
Danke dir vielmals!

Grüße
Henri
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat