Shell Script schreibt kein Log, wenn über Cronjob gestartet

  • 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.

DerMetty

Benutzer
Registriert
12. Sep. 2015
Beiträge
13
Reaktionspunkte
0
Punkte
0
Hallo zusammen!

Ich bin neu hier im Forum und stelle direkt mal meine erste Frage. Hoffentlich kann mir jemand von euch helfen. :)
Ich habe mit diesem Tutorial (http://www.felixdittgen.de/2014/11/...ed-to-remote-server-with-duply-and-duplicity/) erfolgreich IPKG und Duplicity auf meinem NAS installiert und ein erstes Backup erfolgreich zum Laufen gebracht.
Ich habe mir dann ein Shellscript geschrieben, welches ich in /etc/duply/scripts abgelegt habe und welches folgenden Inhalt hat:

Rich (BBCode):
/opt/bin/duply backupextern purge --force && /opt/bin/duply backupextern backup --allow-source-mismatch >> /volume1/homes/nas-admin/backup/logs/duply_backupextern_inc$(date "+%Y-%m-%dT%H:%M:%SZ").log

Führe ich das Shellscript via /etc/duply/scripts/backup.sh aus, rennt das Script los, und schreibt das Ergebnis in das angegebene Logfile. Läuft also wunderbar.
Wenn ich jetzt den Job in die Crontab schreibe, wird dieser anscheinend auch ausgeführt, allerdings kein Logfile geschrieben. Da drin steht nämlich folgendes:

Rich (BBCode):
Start duply v1.9.1, time is 2015-09-11 14:53:38.

Sorry. A fatal ERROR occured:

duplicity missing. installed und available in path?
PATH='/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin'

Ich weiß also nicht, ob der Job erfolgreich war oder ob es irgendwelche Probleme gab. Ich hab ne Menge gegooglet und ausprobiert, ich bekomms leider nie hin.
Das mit dem PATH macht für mich auch keinen Sinn, da ich im Script ja den absoluten Pfad von Duply angebe. Hat jemand von euch einen Tipp? Ich habe auch gelesen, dass die Crontab eine andere Bash verwendet, richtig?

Vielen Dank im Voraus!
Metty
 
Wahrscheinlich ruft duply das duplicity intern selbst auf, ohne absolute Pfadangabe.

Auf der Shell mal
type duply
type duplicity
ausführen und dann den Pfad (die Pfade) im Script an $PATH anhängen.
 
Hi!

Das ist ein sehr guter Tipp. Jetzt gerade kann ich nicht darauf zugreifen, erst morgen wieder... (ich Experte!)
Aber ich würde den PATH dann direkt im Script anpassen?
Bspw:
Rich (BBCode):
PATH=$PATH:/path/to/duply:/path/to/duplicity
(Rest des Scriptes)
 
Ja, es wird wohl am Pfad liegen.
Außerdem leite auch mal die Fehlerausgabe ins Log um (... > ...log 2>&1)
 
Ich habe das Script nun angepasst:
Rich (BBCode):
PATH=$PATH:/opt/bin/duply:/opt/bin/duplicity
/opt/bin/duply backupextern backup --allow-source-mismatch > /volume1/homes/nas-admin/backup/logs/duply_ backupextern_inc_$(date "+%Y-%m-%dT%H:%M:%SZ").log 2>&1

Aber leider funktioniert das immer noch nicht, nun bekomme ich diesen Fehler im Log:
Rich (BBCode):
env: bash: Not a directory
Kann jemand von euch damit was anfangen? Beim manuellen Ausführen des Scripts funktioniert es immer noch...
 
Ich habe das Script nun angepasst:
Rich (BBCode):
PATH=$PATH:/opt/bin/duply:/opt/bin/duplicity
/opt/bin/duply backupextern backup --allow-source-mismatch > /volume1/homes/nas-admin/backup/logs/duply_ backupextern_inc_$(date "+%Y-%m-%dT%H:%M:%SZ").log 2>&1

ist PATH=$PATH:/opt/bin/duply:/opt/bin/duplicity ein verzeichniss ?
oder wie hier bein aufruf "/opt/bin/duply backupextern ....." ein programm ?
 
$PATH = Pfad also immer ein Verzeichnis in dem dann die ausführbaren Dateien liegen
 
Genauer gesagt ist es eine Umgebungsvariable, in der sich eine durch Doppelpunkt getrennte Liste von Pfaden befindet.
 
Was ich damit sagen wollte ist das "duply" entweder ein verzeichniss oder ein programm ist aber nicht beides !
also ist eine der beiden zeilen falsch.
 
Richtig. /opt/bin/duply ist offensichtlich ein Programm und hat nichts in der PATH-Variablen zu suchen. Für duplicity gilt vermutlich das Gleiche. Die wird hier auch gar nicht benötigt, da das Programm mit komplettem Pfad aufgerufen wird.
 
Okay, richtig. Also muss im PATH nur /opt/bin/ eingetragen werden, ja?
 
Ja, wobei es in Deinem Skript - wie gesagt - redundant wäre.
 
Aber für Duplicity anscheinend ncht. Ohne PATH bekomme ich ja den ersten Error, dass duplicity nicht definiert ist.
 
ist denn duply eventuell "nur" ein Link auf duplicity? Falls ja mal probiert im Script direkt /opt/bin/duplicity zu verwenden?
 
Nein, duply ist ein Programm, welches duplicity mit einigen Parametern aufruft. Eine Art Frontend quasi.
Zur Not muss ich auf duply verzichten und nur mit duplicity arbeiten...
 
Wo liegt denn das duplicity-binary genau? Im Verzeichnis /opt/bin/duplicity? Nur dann würde Deine Definition der PATH-Variable helfen, falls duply duplicity ohne Pfad aufruft.
 
Dann solltest Du /opt/bin in die PATH-Variable im Skript aufnehmen.
 
Das habe ich gerade eben gemacht. Außerdem habe ich noch "duply" dem Benutzer Root via chown zugewiesen. Es scheint nun via Crontab zu klappen. Ich mache noch einen zweiten Test.
 
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