Docker Befehl im Scheduler ausführen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

hennerich

Benutzer
Registriert
10. Feb. 2023
Beiträge
9
Reaktionspunkte
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?
 
Schalte mal das Logging ein, indem du einen Ordner dort hinterlegst:
33.png
 
  • Like
Reaktionen: hennerich
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.
 
danke euch für die schnellen Antworten, das teste ich nachher gleich mal

Viele Grüße
Henri
 
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
 
Hast du als Benutzer bei der Aufgabe sicher root ausgewählt?
Und kannst du den Befehl per ssh fehlerfrei ausführen?
 
...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!
 
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?
 
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
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.
 
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
Warte mal, das InfluxDB Backup erstellt sowas hier:
1676127069197.png

Wie würdest du das umsetzen?
 
Zuletzt bearbeitet von einem Moderator:
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
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
 
Status
Für weitere Antworten geschlossen.
 

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