Problem bei eigenem rsync-Script durch Zeilenschaltung im Code?

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

Albyricus

Benutzer
Registriert
20. Sep. 2020
Beiträge
2
Reaktionspunkte
0
Punkte
1
Hi Leute,

ich bin casual User von Linux und 2 ältern Buffalo NAS Systemen und habe mir nun eine D920+ zugelegt und bin grundsätzlich begeistert, ich habe nur 1 Problem das ich nicht verstehe und hoffe auf eure Hilfe. (Achja, ich löse das Problem über ein Script, weil momentan die DS920+ noch die Daten sich holt! Wenn das auch mit einer App funktioniert bin ich über Vorschläge sehr dankbar!)

Bisher hat das rsync bei mir ein externer Raspberry pi durchgeführt, weil die beiden NAS-Systeme sich im Netzwerk nicht gegenseitig erkannt haben. Das hat auch ein paar Jahre hervorragend geklappt. Nun habe ich mir die DS920+ zugelegt, welche mein Hauptspeicher werden soll, und da diese ja selber Scripte ausführen kann, wollte ich den Raspberry in Ruhestand schicken. Deswegen habe ich:
- Script mit "Notepad ++" kurz kopiert,
- den alten BuffaloNAS über "Remote-Ordner bereitstellen -> Freigegebener CIFS-Ordner" eingebunden
- und das Script auf der Synology durchlaufen lassen.
Der Synology hat angefangen zu arbeiten (wie ich über SSH (top) prüfen konnte), aber es wurden keine Daten gespeichert. Ich habe ne ganze Zeit herumgetüftelt bis mir folgendes aufgefallen ist. Wenn das Script mehr als 1ne Zeile hatte, wurde die Zeilenschaltung am Ende des Zielpfades immer mit einem %-Zeichen erkannt und wie folgt im top ausgegeben:

rsync /volume1/LSQVL/Daten/ /volume1/Daten%

Wenn ich das Script tabula Rasa auf 1ne Zeile reduziere funktioniert der rsync und die Ausgabe im "top" erfolgt ohne das % Zeichen am Ende, allerdings sind halt auch alle "Fehlerabfangroutinen" weg, was schon 1x dazu geführt hat, dass die DS920+ wieder alle Daten gekillt hat, weil das Netzwerk offline war....

Liegt hier das Problem an Notepad++, das z.B. die Zeilenschaltung falsch gespeichert wird? Leider habe ich nicht mehr das Script welches ich auf die DS angepasst habe, aber ich habe noch das orignial Script, welches auf dem Raspberry lief und zwischen den beiden Buffalos den Abgleich durchgeführt hat:

Code:
#!/bin/bash

if ping -q -c 2 192.168.yyy.xxx &> /dev/null ; then
        heute=`date +%Y-%m-%d`
        jetzt=$(date +"%H:%M:%S %d.%m.%Y")
        LogVerzeichnis=`date +%Y-%m`
        LogVerzeichnisAlt=$(date -d "-1 month" +%Y-%m)
        Schaltung=" /n "
                if [ ! -d "/media/LSCHL/Backup/$LogVerzeichnis" ] ; then
                        sudo mkdir /media/LSCHL/Backup/$LogVerzeichnis
                else
                        echo "Ordner existiert"
                fi

        if ping -q -c 2 192.168.yyy.xxx &> /dev/null ;
        then
        echo VPN Backup $jetzt gestartet | mail -s "Backup gestartet" „meineEmailAdresse“

         rsync -av --partial --append-verify --log-file=/media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogMusik.txt --delete /media/LSQVL/Musik/ /media/LSCHL/Backup/Musik/
         LogMusik="$(tail /media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogMusik.txt)"

         rsync -auv --log-file=/media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogDaten.txt --delete /media/LSQVL/Daten/ /media/LSCHL/Backup/Daten/
         LogDaten="$(tail /media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogDaten.txt)"

         rsync -auv --log-file=/media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogKinder.txt --delete /media/LSQVL/Kinder/ /media/LSCHL/Backup/Kinder/
         LogKinder="$(tail /media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogKinder.txt)"

         rsync -auv --log-file=/media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogOwnCloud.txt --delete /media/LSQVL/ownCloud/ /media/LSCHL/Backup/ownCloud/
         LogownCloud="$(tail /media/LSCHL/Backup/$LogVerzeichnis/${heute}_BackupLogOwnCloud.txt)"

         jetzt=$(date +"%H:%M:%S %d.%m.%Y")
         echo -e VPN Backup $jetzt abgeschlossen,"$Schaltung", "$LogMusik","$Schaltung","$LogDaten","$Schaltung","$LogKinder","$Schaltung","$LogownCloud", | mail -s "Backup beendet" „meineEmailAdresse“

        else
         jetzt=$(date +"%H:%M:%S %d.%m.%Y")
         echo Laufwerk nicht verbunden
         echo VPN Ziel am $jetzt nicht erreichbar | mail -s "LS-441 nicht erreichbar" „meineEmailAdresse“
        fi

        sudo rm -r /media/LSCHL/Backup/$LogVerzeichnisAlt
else
echo Quell Laufwerk nicht verbunden
jetzt=$(date +"%H:%M:%S %d.%m.%Y")
echo LS-QVL am $jetzt nicht erreichbar | mail -s "LS-QVL nicht erreichbar!" „meineEmailAdresse“
fi
 
Wenn du nur Pfade angepasst hast liegt es wahrscheinlich nicht an der Syntax sondern wirklich nur am Windows Zeilenumbruch. Das kannst du ja in Notepad++ umstellen.
 
Hallo erstmal und willkommen im Forum @Albyricus

(B)ash Scripte sollten grundsätzlich im Zeichensatz utf-8 abgelegt sein. Beim Nodepad++ habe ich es mittlerweile so eingestellt, das Neue Dokumente gleich als utf-8 angelegt werden und alle Dokumente auch in diesem Zeichensatz gespeichert werden. Beim konvertieren eines z.B. ISO Zeichensatzes nach utf-8 werden oftmals die Zeilenumbrüche falsch übernommen und es wird dann am Zeilenende z.B. ein \r\n gesetzt. Ein % Zeichen hatte ich zwar noch nicht, aber das wird wohl aus der selben Ecke herrühren. Aus eigener Erfahrung weiß ich aber auch, das selbst einige Linux Editoren so einen (Windows-) Zeilenumbruch nicht ausgeben. Am Ende bin ich durch Zufall über den Linux Editor nano gestolpert, der mir all dies angezeigt hat. Nach dem Löschen des Zeilenendes lief das Script dann durch. Vielleicht ist ja genau das dein Problem.

Tommes
 
Hi Leute,

wieder ein paar Kopfschmerzen weniger.... Aber auch wieder ein völlig komischer Fehler. Notepad++ war auf UTF-8 eingestellt, Nano habe ich auf meiner DS nachinstalliert und mir das Script angesehen. Aber auch hier war kein "unbekanntes Zeichen" enthalten. Schließlich habe ich mit "vim -b" mir die Datei angeschaut und siehe da, am Ende jeder Zeile tauchte ein "^M" auf..... mit dem vim-Editor gelöscht und schon sieht es besser aus, und funktioniert auch!
 
Zuletzt bearbeitet:
Warum nicht einfach "vi" verwenden? Gibt es seit Ewigkeiten auf jedem Linux und macht nie Probleme.
 
Zum einen ist ein UTF-8 Zeichensatz ratsam (siehe Beitrag #3 @Tommes), zum anderen beim Notepad++ Editor zusätzlich darauf achten dass der Zeilenumbruch auf "LF" gesetzt ist (siehe @Fusion).

Entweder man stellt dies generell so ein, oder man kann es im Editor Fenster unten in der Infoleiste umstellen.

Option A (globale Einstellung):

notepadpp-linefeed.png

Option B ( Ad hoc):

notepadpp-linefeed-imm.png
 
Feigling ?. Zum Glück bin ich noch mit vi groß geworden ;)
Wie wär's alternativ mit dem Editor in WinSCP für alle WindowsKlickiBunties?
Ansonsten kann man auch noch beim Transfer der Dateien zwischen Windows und Linux einiges falsch machen.
 

HALLOOOOOO! Tse. Tse. Tse.?

Also, ich mach das mittlerweile immer so und fahre damit ganz gut. Unter Windows arbeite ich mit Notepad++ mit den von @luddi gezeigten Einstellungen. Dann schiebe ich mit WinSCP die Scripte auf die DS. Evtl. setze ich dann gleich noch die gewünschten Rechte und das war‘s dann. Läuft bei mir seit Jahren so und bin zufrieden.

Befinde ich mich jedoch in einem Terminal, so arbeite ich am liebsten mit dem mc inkl. mcedit als Editor. Ich bin auch ein Freund von nano, den ich ebenfalls über OPKG auf die DS geworfen habe. Und auch hier bin ich bisher immer ans Ziel gekommen. vi hingegen ist für mich sowas wie auf Steintafeln meißeln... für mich absolut nicht zeitgemäß... und in der Bedienung für mich zum Haare raufen. Wenn man damit groß geworden ist, gibt es sicherlich nichts besseres oder einfacheres. Ich bin dafür wohl schon zu alt oder zu starrsinnig um mich mit sowas auseinanderzusetzen. Also nichts von wegen Feigling. Pöh
 
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