• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst FreeFileSync Batch startet nicht

Moin allerseits. Mein erster Post hier. Ich beschäftige mich erst seit Anfang des Jahres mit Linux. Angefangen hat es damit, dass ich an einen kleinen Terra Mini-Server gekommen bin und jemand das Wort Proxmox in den Raum geworfen hat. Das hat mich neugierig gemacht und habe ein bisschen damit rumgespielt. Als Neuling stand ich (bzw. stehe noch :D) vor vielen Problemen, die ich mit Hilfe des Internets meist lösen konnte.

Aktuell habe ich folgende Konfiguration:

Terra Mini-Server mit Proxmox
- Openmediavault VM
- VM zum Synchronisieren

Synology DS118

Ich möchte meine Daten auf der OMV-VM mit meiner Synology in beide Richtungen synchronisieren. Auf der Sync-VM habe ich die Mountpoints erstellt und bei OVM und Synology die Freigaben erteilt. Wenn ich FreeFileSync starte, dann klappt der Sync ohne Probleme. Beim Start der Batch-Datei klappt der Sync auch ohne Probleme. Ich habe dann einen Cronjob erstellt, mit Log-Datei. Sobald die Batch-Datei über den Cronjob startet, funktioniert der Sync nicht und ich komme nicht dahinter, warum das so ist. Ich hoffe ihr könnt mir da weiterhelfen.

Hier noch der Befehl in der Crontab und die Ausgabe der Log-Datei:

Code:
*/2 * * * * /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup.log 2>&1

Code:
/home/markus/FreeFileSync/BatchRun.ffs_batch: 1: cannot open ?xml: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 3: cannot open Notes/: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 4: cannot open Compare: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 5: cannot open Variant: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 6: cannot open Symlinks: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 7: cannot open IgnoreTimeShift/: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 8: cannot open /Compare: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 9: cannot open Synchronize: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 10: cannot open Variant: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 11: cannot open DetectMovedFiles: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 12: cannot open DeletionPolicy: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 13: cannot open VersioningFolder: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 14: cannot open /Synchronize: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 15: cannot open Filter: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 16: cannot open Include: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 17: cannot open Item: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 18: cannot open /Include: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 19: cannot open Exclude: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 20: cannot open Item: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 21: cannot open Item: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 22: cannot open /Exclude: No such file
/home/markus/FreeFileSync/BatchRun.ffs_batch: 23: Syntax error: redirection unexpected

LG,
Markus
 
Ein beliebter Fehler sind fehlende Pfad-Angaben im Skript. Ist das Medium zum Ausführungszeitpunkt verfügbar? Ansonsten brauchen wir die ganze crontab und das Skript.
 
OP
89P13
Die Batch-Datei wird ja mit FreeFileSync erstellt, ich hätte gedacht, dass da alles Notwendige drin ist. Ich wüsste aber auch nicht, wie ich die Pfade im Skript unterbringen sollte, daher lade ich mal alles hoch.

Und ja, OMV und Synology sind gemounted und verfügbar. Bei manuellem Start von FreeFileSync funktioniert es ja.

Inhalt Crontab:

Code:
  GNU nano 5.4                                /tmp/crontab.z1Bw6o/crontab                                         
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

#*/2 * * * * /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup.log 2>&1

Inhalt Batch-Datei:

Code:
<?xml version="1.0" encoding="utf-8"?>
<FreeFileSync XmlType="BATCH" XmlFormat="18">
    <Notes/>
    <Compare>
        <Variant>TimeAndSize</Variant>
        <Symlinks>Exclude</Symlinks>
        <IgnoreTimeShift/>
    </Compare>
    <Synchronize>
        <Variant>TwoWay</Variant>
        <DetectMovedFiles>false</DetectMovedFiles>
        <DeletionPolicy>Permanent</DeletionPolicy>
        <VersioningFolder Style="Replace"/>
    </Synchronize>
    <Filter>
        <Include>
            <Item>*</Item>
        </Include>
        <Exclude>
            <Item>*/.Trash-*/</Item>
            <Item>*/.recycle/</Item>
        </Exclude>
        <SizeMin Unit="None">0</SizeMin>
        <SizeMax Unit="None">0</SizeMax>
        <TimeSpan Type="None">0</TimeSpan>
    </Filter>
    <FolderPairs>
        <Pair>
            <Left>/home/markus/OMV</Left>
            <Right>/home/markus/1Synology</Right>
        </Pair>
    </FolderPairs>
    <Errors Ignore="true" Retry="0" Delay="5"/>
    <PostSyncCommand Condition="Completion"/>
    <LogFolder/>
    <EmailNotification Condition="Always"/>
    <Batch>
        <ProgressDialog Minimized="true" AutoClose="true"/>
        <ErrorDialog>Show</ErrorDialog>
        <PostSyncAction>None</PostSyncAction>
    </Batch>
</FreeFileSync>
 
Wenn es sich bei
um /home/markus/FreeFileSync/BatchRun.ffs_batch handelt, dann ist das für mich keine unter Linux ausführbare Datei. Das sieht wie eine Steuerdatei für irgendein Programm aus. Wie gehst Du bei
Beim Start der Batch-Datei klappt der Sync auch ohne Probleme.
vor? In einer Konsole
Code:
/home/markus/FreeFileSync/BatchRun.ffs_batch
einzugeben und die Eingabe-Taste zu drücken, kann es wohl nicht sein (oder Deine Umgebung ist so speziell, daß ich nicht weiterhelfen kann).
 
OP
89P13
Also, in FreeFileSync gibt es einen Button, mit dem man den Synchronisationsauftrag als Batchauftrag speichern kann. Das ist die BatchRun.ffs_batch, die in dem Ordner /home/markus/FreeFileSync/ liegt.

Bildschirmfoto vom 2023-05-23 14-10-34.png

Wenn ich im Dateiexplorer einen Doppelklick auf diese Datei mache, dann startet die Synchronisation der beiden Ordner OMV/Synology. Habe ich gerade nochmal getestet. Ich habe eine Datei auf OMV erstellt, Doppelklick auf BatchRun.ffs_batch gemacht und schon war die Datei auch auf dem Synology.
 
Jetzt kommen wir der Sache nahe. Wenn Du in einem Dateimanager auf eine Datei (doppel-)klickst, wird ein Programm gestartet und diesem der Dateiname in irgendeiner Form übergeben. Diese Informationen sind in Dateien mit der Endung *.desptop gespeichert, wobei die möglichen Speicherorte durchaus von der Distribution und der grafischen Oberfläche abhängen können.

Eventuell findest Du in den Einstellungen Deiner grafischen Oberfläche, welche Programme der Dateiendung ffs_batch zugeordnet sind und wie deren Aufruf genau erfolgt. Da ich weder Proxmox noch dessen Basis Debian noch die Debian-Paketverwaltung noch Deinen Dateimanager kenne, kann ich Dir bei der Suche nicht helfen.
 
Ich habe einmal in das Paket meiner Distribution hineingeschaut. Die beiden *.desktop-Dateien dienen nur zum Starten der beiden Programme, da gibt es keine Parameter. Ein kurzer Blick in das Handbuch führt zur Vermutung, daß Du keinen üblichen Dateimanager meinst, sondern die Oberfläche des Programms.

Ob es reicht, die im Handbuch genannten Windows-Datei- und Verzeichnisnamen auf die Linux-Namen anzupassen, mußt Du selbst herausfinden. Ich weiß nicht, wie das Programm arbeitet und in welche Richtung Du synchronisierst, aber Du solltest bei der Batch-Verarbeitung ein Skript verwenden, das die Synchronisation nur durchführt, wenn Quelle und Ziel auch eingehängt sind. Eine nicht eingehängte Quelle kann zum Löschen des Ziels führen, ein nicht eingehängtes Ziel wird die Partition vollschreiben, da das als Einhängepunkt dienende Verzeichnis ja existiert.

Beschäftigen werde ich mich mit dem Programm nicht, für solche Aufgaben mag ich keine bunten Bilder.
 
OP
89P13
Ist das nicht das erste Programm, das bei Rechtsklick auf die BatchRun.ffs_batch ----öffnen mit erscheint?
Ja, wenn ich auf "öffnen mit FreeFileSync" klicke, dann startet der Sync auch wie er soll.. Aber nicht, wenn ich die BatchRun.ffs_batch per Cronjob starte. Dann habe ich in der Log-Datei o. g. Fehlermeldung.
 
OP
89P13
Beschäftigen werde ich mich mit dem Programm nicht, für solche Aufgaben mag ich keine bunten Bilder.
Ich bin halt noch relatv neu in der Linux-Welt, da hilft mir eine GUI schon weiter. Ich habe auch gesehen, dass viele so einen Sync per Skript laufen lassen. Aber an so ein Skript traue ich mich nicht ran.
 
Ich will Dir die GUI auch nicht ausreden, aber für den von Dir gewünschten Vorgang kann sie Dir nicht helfen. Du mußt ein Konsol-Fenster öffnen und dort den gewünschten Befehl eingeben. Auch wenn das Handbuch auf Windows ausgelegt ist, solltest Du das schaffen.

Der nächste Schritt ist dann ein Skript mit passender Fehlerbehandlung, denn diese ist bei jeder unbeaufsichtigten Hintergrundverarbeitung das Wichtigste.

Wenn das geschafft ist, wird das Skript in die crontab eingetragen. Vielleicht sind noch Anpassungen notwendig, aber dann kannst Du die Arbeit beruhigt der Hintergrundverarbeitung überlassen.
 

susejunky

Moderator
Teammitglied
Hallo @89P13 ,

zunächst noch nachträglich herzlich willkommen im Linux-Club-Forum.

Ja, wenn ich auf "öffnen mit FreeFileSync" klicke, dann startet der Sync auch wie er soll.. Aber nicht, wenn ich die BatchRun.ffs_batch per Cronjob starte. Dann habe ich in der Log-Datei o. g. Fehlermeldung.
Nun, woher sollte crond auch wissen, dass die genannte Datei nicht direkt ausgeführt werden kann, sondern zuerst das Programm FreeFileSync gestartet und diesem dabei die Datei /home/markus/FreeFileSync/BatchRun.ffs_batch zur Abarbeitung übergeben werden muss?

Ich arbeite ausschließlich mit openSUSE Tumbleweed und verwende nur systemd-timer, daher ist mein Wissen bezüglich crond schon etwas eingerostet aber eventuell würde folgender Eintrag in crontab funktionieren
Code:
*/2 * * * * /usr/bin/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup.log
Allerdings empfehle ich Dir dringend, dem von @josef-wien bereits mehrfach gemachten Hinweis zu folgen und FreeFileSync nicht direkt aus crontab heraus zu starten.

Erstelle ein Skript, das zunächst sicherstellt, dass alle Voraussetzungen für eine erfolgreiche Synchronisation (Netzwerkverbindung OK, Zugriffsrechte OK, ...) gegeben sind und das dann FreeFileSync aufruft. Dieses Skript kannst Du dann in crontab eintragen.

Viele Grüße

susejunky
 
OP
89P13
Hallo @89P13 ,

zunächst noch nachträglich herzlich willkommen im Linux-Club-Forum.


Nun, woher sollte crond auch wissen, dass die genannte Datei nicht direkt ausgeführt werden kann, sondern zuerst das Programm FreeFileSync gestartet und diesem dabei die Datei /home/markus/FreeFileSync/BatchRun.ffs_batch zur Abarbeitung übergeben werden muss?

Ich arbeite ausschließlich mit openSUSE Tumbleweed und verwende nur systemd-timer, daher ist mein Wissen bezüglich crond schon etwas eingerostet aber eventuell würde folgender Eintrag in crontab funktionieren
Code:
*/2 * * * * /usr/bin/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup.log
Dafür schon mal vielen Dank, das funktioniert! Dein Wissen ist also noch nicht ganz eingerostet ;-)
Allerdings empfehle ich Dir dringend, dem von @josef-wien bereits mehrfach gemachten Hinweis zu folgen und FreeFileSync nicht direkt aus crontab heraus zu starten.

Erstelle ein Skript, das zunächst sicherstellt, dass alle Voraussetzungen für eine erfolgreiche Synchronisation (Netzwerkverbindung OK, Zugriffsrechte OK, ...) gegeben sind und das dann FreeFileSync aufruft. Dieses Skript kannst Du dann in crontab eintragen.

Viele Grüße

susejunky
Verstehe ich vollkommen. Aber wie oben schon gesagt, habe ich null Erfahrung im Script schreiben. Bei den von euch vorgeschlagenen Einträgen (passende Fehlerbehandlung von @josef-wien, die Voraussetzungen von Dir) wüsste ich nicht mal wie ich anfangen soll...

EDIT: Ich habe jetzt erstmal den Cronjob deaktiviert weil ich Angst habe das was schiefläuft und meine Daten alle weg sind... :D
 

susejunky

Moderator
Teammitglied
Hallo @89P13 ,

Aber wie oben schon gesagt, habe ich null Erfahrung im Script schreiben.
Nur Mut!

Mit der Suchmaschine Deines geringsten Misstrauens und dem Suchbegriff "bash für anfänger" findest Du in den Weiten des Internets jede Menge Anleitungen. Und bei konkreten Fragen wirst Du sicherlich auch hier im Forum Unterstützung finden.

Ich kann verstehen, dass Du momentan GUI-Programmen den Vorzug gibst, aber ich denke Du solltest Dir rsync einmal ansehen ...

Viele Grüße

susejunky
 
Aus meiner Sicht sollte es reichen, wenn Du in der Quelle und im Ziel jeweils eine gleichnamige Datei anlegst und vor der Ausführung deren Vorhandensein prüfst. Ich habe die Dateien in den Beispielen /pfad1/datei und /pfad2/datei genannt (diese Werte mußt Du jeweils anpassen) und benutze den von susejunky genannten Befehl. Die Dateien legst Du mit
Code:
touch /pfad1/datei /pfad2/datei
an. Danach erzeugst Du ein Skript /home/markus/bin/irgendeinname.sh mit folgendem Inhalt (auf eine Variable für /home/markus/FreeFileSync habe ich zur leichteren Lesbarkeit verzichtet):
Code:
#!/bin/bash

# Programm zur Datensynchronisation

if test -e /pfad1/datei -a -e /pfad2/datei
then
  /usr/bin/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup
  echo $(date +'%-d.%-m.%-Y um %X.%N Uhr') >> /home/markus/FreeFileSync/backup
else
  echo "Die Synchronisation konnte am $(date +'%-d.%-m.%-Y um %X.%N Uhr') NICHT durchgeführt werden." >> /home/markus/FreeFileSync/backup-fehler
fi
Nach dem Speichern muß die Datei noch ausführbar gemacht werden (den Befehl chmod findest Du im nachstehenden Überblick), dann kannst Du auf der Konsole testen. Solange du sicher bist, daß Quelle und Ziel vorhanden sind, kann ja nichts passieren.

Ein (einfacher, aber ausreichender) Überblick: An A-Z Index of the Linux command line - SS64.com
 
OP
89P13
Guten Morgen allerseits. Vielen Dank für eure Hilfe und die Zeit und Arbeit, die ihr investiert habt. Ein bisschen Hilfe bräuchte ich aber noch. Ich habe die Vergleichsdateien erstellt, das Script erstellt und getestet. Das Script funktioniert, ich habe testweise mal eine der Vergleichsdateien gelöscht und es wurde nicht synchronisiert, super. Wenn beide Dateien vorhanden sind, wird synchronisiert. Das ist schon mal wirklich gut. Dann habe ich den Cronjob erstellt, mit dem ich das Script starte. Und da habe ich ein seltsames Verhalten. Der Cronjob startet offensichtlich meine OMV_Synology_Sync.sh. Es wird auch die Log-Datei ohne Fehler erstellt. Allerdings startet der Sync nicht. Und da komme ich im Moment nicht weiter. Ich bin mir allerdings fast sicher, dass mit den Pfaden soweit alles stimmt. Ich habe auch das Script, die Batch-Datei und die FreefileSync Dateien alle auf Ausführbarkeit überprüft, das passt alles. Vielleicht habt ihr ja noch eine Idee.

Code:
#!/bin/bash

# Programm zur Datensynchronisation

if test -e /home/markus/OMV/Vergleichsdatei-nicht-loeschen.txt -a -e /home/markus/1Synology/Vergleichsdatei-nicht-loeschen.txt
then
  /home/markus/FreeFileSync/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup
  echo $(date +'%-d.%-m.%-Y um %X.%N Uhr') >> /home/markus/FreeFileSync/backup
else
  echo "Die Synchronisation konnte am $(date +'%-d.%-m.%-Y um %X.%N Uhr') NICHT durchgeführt werden." >> /home/markus/FreeFileSync/backup-fehler
fi

Code:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

#*/2 * * * * /home/markus/FreeFileSync/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup_.log

*/2 * * * * /home/markus/bin/Sync_OMV_Synology.sh
 
Wenn der Zeitstempel in die Datei /home/markus/FreeFileSync/backup ausgegeben wird, funktioniert der cronjob. Dann liegt es am Programm, und da wird Dir nur jemand helfen können, der sich damit gut auskennt.

Da das Handbuch auf Windows ausgelegt ist, fällt mir als theoretische Möglichkeit ein, daß das Programm dumm genug ist, eine grafische Oberfläche vorauszusetzen, aber die steht dem cronjob nicht zur Verfügung (der arbeitet völlig unabhängig von Dir). Nachtrag: Wenn Du das überprüfen willst, dann wechsle mit Strg-Alt-F2 in eine Textkonsole, melde Dich an, und führe das Skript aus. Mit Strg-Alt-F7 kommst Du wieder ins grafische System.
 
Zuletzt bearbeitet:

susejunky

Moderator
Teammitglied
... fällt mir als theoretische Möglichkeit ein, daß das Programm dumm genug ist, eine grafische Oberfläche vorauszusetzen, aber die steht dem cronjob nicht zur Verfügung ...
hätte dann nicht bereits der direkte Aufruf von FreeFileSync aus crontab heraus
Code:
...
*/2 * * * * /home/markus/FreeFileSync/FreeFileSync /home/markus/FreeFileSync/BatchRun.ffs_batch >> /home/markus/FreeFileSync/backup_.log
...
fehlschlagen müssen?

@89P13 : Wenn ich mich richtig erinnere, dann kann es sowohl benutzerspezifische als auch systemweite crontab-Dateien geben. Welche crontab-Datei (/pfad/zu/crontab) ist die von Dir gezeigte?
Der Cronjob startet offensichtlich meine OMV_Synology_Sync.sh. Es wird auch die Log-Datei ohne Fehler erstellt.
Bitte beachte, dass die reine Existenz der Dateien /home/markus/FreeFileSync/backup und /home/markus/FreeFileSync/backup-fehler kein zuverlässiger Indikator dafür sind, dass /home/markus/bin/Sync_OMV_Synology.sh von dem cron-Job ausgeführt wurde.

Du verwendest ">>" damit wird eine nicht vorhandene Datei neu erstellt ODER an eine bestehende Datei angehängt; d.h. nach dem ersten (ggf. manuellen) Lauf von /home/markus/bin/Sync_OMV_Synology.sh existiert mind. eine der Dateien /home/markus/FreeFileSync/backup oder /home/markus/FreeFileSync/backup-fehler bis sie von Dir gelöscht werden.

Viele Grüße

susejunky
 
OP
89P13
So, kurze Rückmeldung. Ich habe mich mal mit der Fehlermeldung beschäftigt, die der Cronjob ausgeworfen hat. Anscheinend liegt es daran, dass mit dem Batch von FreeFileSync die grafische Oberfläche geöffnet wird. So wie @susejunky schon vermutet hat. Ich konnte das aber mit einem weiteren Eintrag im Cronjob lösen:

Code:
*/2 * * * * DISPLAY=:0 /home/markus/bin/Sync_OMV_Synology.sh >> /home/markus/FreeFileSync/cronjob.log

Nachdem ich das "DISPLAY=:0" eingefügt hatte, funktionierte es. Ich weiß zwar nicht genau was dieser Eintrg macht, aber das Ziel ist erstmal erreicht. danke euch :)
 
Oben