Dateien speichern mit 0KB über FTP

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    Ich habe einen Raspberry 400 mit SSD. Diese ist mit einer zusätzlichen Partition extra für die Instar Kamera Bilder und Videos.

    Die Bilder und Videos wurden immer abgelegt. Seit kurzem aber nur noch 0KB Dateien.

    Da ich 2 Kameras habe und bei beiden ist das gleiche Problem, trendiere ich stark auf den Pi.

    Installiert ist proftpd, das ging bis zu dem Tag...

    Bilder und Videos kommen weiterhin an, haben aber 0KB

    ?thumbnail=1

    Hier das extra Verzeichnis für die Bilder und Videos:

    Code
    pi@pi400:/Kamera $ ls -al
    total 3304
    drwxrwxr-x  5 instar ftpuser    4096 Jun 28 21:39 .
    drwxr-xr-x 20 root   root       4096 Jun 27 14:12 ..
    drwxr-xr-x  2 instar ftpuser 2899968 Dec  7 07:53 Eingang
    drwxrwxr-x  2 instar ftpuser   16384 Jun 27 13:38 lost+found
    drwxr-xr-x  2 instar ftpuser  442368 Dec  7 07:58 Mobil

    Die Kameras konnten kein Bild und Video mehr speichern über FTP. Daher habe ich eingegeben:

    Code
    sudo chmod -G 775 /Kamera/Eingang

    Kamera zeigt endlich wieder an, dass Bild erfolgreich gespeichert wurde.

    Leider hat das Bild immer noch 0KB

    An was könnte das liegen?

  • Zur hilfreichsten Antwort springen
  • Und was sagt df -h?

    Vielen Dank für die Info. Was hat Befehl ausgegeben: Partition 100% belegt.

    Ich habe seit Neuaufsetzen einen Befehl, der mir Dateien in dem Kameraordner nach 100 Tagen automatisch löscht. Der Befehl hat aber aus welchem Grund auch immer plötzlich nicht mehr funktioniert. Obwohl ich als Linux Anfänger das etliche Tage beobachtet habe, dass genau dies nicht passiert.

    Ich habe den Benutzer Pi der Gruppe ftpuser hinzugefügt, jetzt ging das autom. löschen wieder über Putty mit dem Benutzer Pi. Den Befehl lasse ich zeitgesteuert über Nodered 2x im Monat ausgeben. Wie geschrieben über Kommandozeile (Programm Putty) ging der Befehl. Über Nodered (im ioBroker) geht der Befehl aber nicht. An was könnte das liegen?

    Frage 2: Gibt es eine Möglichkeit sich eine Abfrage zu setzen: Wenn SSD Partition sda3 bei 95% voll, dann Meldung?

    Einmal editiert, zuletzt von Herry80 (9. Dezember 2022 um 08:25)

  • Das könnte man z.B. über ein Bash Script machen.

    Das Script periodisch per cron laufen lassen und bei erreichen des Schwellwertes eine Mail senden.

    So würde ich das machen, es gibt aber auch bestimmt andere Möglichkeiten.

    Gruss

  • So ich habe das nun paar Tage probiert, komme da nicht weiter.

    Probiert habe ich das im Terminal mit Putty:

    Die Dateien löschen kann ich mit diesem Befehl nach Zeit X:

    Code
    sudo find /Kamera/Eingang* -mtime +99 -exec rm {} \;

    Geht aber nicht, muss erst diesen Befehl eingeben:

    Code
    sudo chown -R pi /Kamera

    Dann kann ich den Dateien Löschen Befehl erfolgreich ausführen.

    Wenn ich nun diese Befehle über NodeRed ausführen lassen möchte, geht das aber nicht. Es sind die gleichen Befehle. Im Putty mit Benutzer Pi und Passwort geht es. Das NodeRed im ioBroker geht nicht. Ich denke iobroker ist ein eigener Benutzer. Dachte, OK dann muss ich den Befehl umschreiben:

    Code
    sudo chown -R iobroker /Kamera

    Den Befehl kann ich über Nodered im iobroker aber auch nicht ausführen. Im Putty, kann ich das aber schon. Den Löschbefehl über Nodered im iobroker geht dann aber trotzdem nicht. Also ich schätze, dass das Nodered im iobroker nicht die Berechtigung hat? Wer kann mir Licht ins Dunkel bringen. Danke

  • Herry80 Ich würde dringend davon abraten so viel mit ``sudo`` zu machen. Als menschlicher Benutzer schon nicht, und als Dienst schon gar nicht. Natürlich geht das nicht, denn sonst könnte das ja auch jeder Angreifer der den entsprechenden Dienst erfolgreich übernimmt. Das ``-R`` wäre auch zu viel. Um Dateien aus einem Verzeichnis löschen zu können, muss man das *Verzeichnis* ändern dürfen. Die Rechte der Dateien dort drin sind dafür egal.

    So etwas kann man über Gruppen lösen, also eine Gruppe auf dem Verzeichnis setzen in der alle beteiligten Benutzer sind, die was mit dem Verzeichnis anstellen können sollen. Oder über ACLs, also hier beispielsweise dem Benutzer vom IOBroker-Dienst explizit das Recht hinzufügen, dass der an *dem* Verzeichnis, und nur dem, Veränderungen vornehmen darf.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • __blackjack__ Vielen Dank für deine Info.

    Also verstanden habe ich das schon mit so viel sudo. Aber wie kann ich das denn sonst machen.

    Folgende Befehle erfolglos ausgeführt:

    Nun habe ich von Nodered aus iobroker immer noch keine Berechtigung die Befehle auszuführen und die Kameras können dort auch keine Bilder mehr abspeichern, obwohl ich den Benutzer instar in die Gruppe kameradir hinzugefügt habe.

    So schwer kann das doch nicht sein!

    Habe es jetzt wieder zurückgestellt, damit die Kameras wieder Dateien ablegen können:

    Was habe ich bei diesem schwierigen Thema vergessen?

  • So etwas kann man über Gruppen lösen, also eine Gruppe auf dem Verzeichnis setzen in der alle beteiligten Benutzer sind, die was mit dem Verzeichnis anstellen können sollen. Oder über ACLs, also hier beispielsweise dem Benutzer vom IOBroker-Dienst explizit das Recht hinzufügen, dass der an *dem* Verzeichnis, und nur dem, Veränderungen vornehmen darf.

  • Otto wohnt in einer WG und hat einen PC den alle benutzen dürfen. Otto möchte ein Verzeichnis mit seinen Mitbewohnern teilen, in dem Fotos der WG-Partys liegen.

    Er erstellt eine Gruppe mitbewohner, in der die Mitbewohner eingetragen werden (usermod -aG ...).

    Das Verzeichnis muss er nun noch der Gruppe übergeben, damit deren Mitglieder das Recht bekommen in dem Verzeichnis etwas zu ändern usw. (chown -R :mitbewohner ...).

  • Otto wohnt in einer WG und hat einen PC den alle benutzen dürfen. Otto möchte ein Verzeichnis mit seinen Mitbewohnern teilen, in dem Fotos der WG-Partys liegen.

    Er erstellt eine Gruppe mitbewohner, in der die Mitbewohner eingetragen werden (usermod -aG ...).

    Das Verzeichnis muss er nun noch der Gruppe übergeben, damit deren Mitglieder das Recht bekommen in dem Verzeichnis etwas zu ändern usw. (chown -R :mitbewohner ...).

    Danke, aber ich habe mich ja extra gut eingelesen und genau das habe ich ja gemacht. Scheinbar fehlt nur noch eine Kleinigkeit. Ich habe extra die Schritte dargestellt, was ich alles gemacht habe. Den Zugriff haben aber leider noch nicht alle. Daher frage ich ja, ich komme einfach nicht weiter.

  • hyle Danke, scheinbar total durcheinander gekommen. Also habe ich gemacht. Nun siehts wie folgt aus:

    Code
    pi@pi400:~ $ ls -lart /Kamera
    total 3936
    drwxrwxr-x  2 iobroker kameradir   16384 Jun 27 13:38 lost+found
    -rwxrwxr-x  1 iobroker kameradir   10615 Jun 27 14:19 raspiBackupInstallUI.log
    drwxrwxr-x  5 iobroker kameradir    4096 Jun 28 21:39 .
    drwxr-xr-x 20 root     root         4096 Dec  8 07:31 ..
    drwxrwxr-x  2 iobroker kameradir  876544 Dec 14 18:41 Mobil
    drwxrwxr-x  2 iobroker kameradir 3108864 Dec 16 07:02 Eingang

    Nun kommt als Meldung leider folgende:

    Als Lösung habe ich was gefunden diese Datei zu ändern:

    Code
    sudo nano /etc/sudoers.d/010_pi-nopasswd

    Änderung von "pi" in einen Benutzer, der das ausführen soll: In meinem Fall wäre das iobroker (hoffe ich)

    pi ALL=(ALL) NOPASSWD: ALL --> iobroker ALL=(ALL) NOPASSWD: ALL

    Aber ich habe auch darüber viel gelesen, dass dann das sudo bei pi nicht mehr funktionieren könnte. Über den Benutzer iobroker habe ich es nicht geschafft, mich in der Konsole anzumelden (statt User pi). Daher frage ich lieber euch Fachleute, bevor ich mein System komplett schrotte. Oder liege ich mit meinen Recherchen komplett aufm Holzweg?

  • Hallo zusammen,

    leider habe ich das Problem immer noch nicht lösen können. Ich habe nun euren Rat befolgt und nicht so im System Sachen verändert. Meinen Befehl alte Dateien zu löschen hatte ich damals versucht über RaspiBackup direkt zu machen. Dazu in der .conf die Zeile ergänzt:

    Code
    # Durch && getrennte Befehle, die ausgeführt werden nachdem die Services wieder gestartet werden
    DEFAULT_AFTER_STARTSERVICES="sudo find /Kamera/Mobil* -mtime +22 -exec rm {} \;; sudo find /Kamera/Eingang* -mtime +22 -exec rm {} \;"

    Genau 1x hat das funktioniert, ich war zufrieden und der Juhuu Schrei war groß... dann ist die Platte wieder voll gelaufen. Dödömm

    So wie ich das verstehe, kann ich in dieser Zeile genau so etwas eintragen und der Befehl wird dann einfach ausgeführt. Klappt halt leider nicht (mehr zuverlässig). Warum das 1x ging, weiß ich nicht, aber Fakt ist, die alten Dateien werden nicht zuverlässig gelöscht. Vielleicht hat das was mit der dritten Partition zu tun, die ja bei den Backups ausgeklammert ist durch diesen Befehl in der .conf:

    Code
    DEFAULT_IGNORE_ADDITIONAL_PARTITIONS=1

    Den Befehl händisch ausführen funktioniert. Nur besteht die Gefahr dies zu vergessen, daher soll das bei jedem Backup automatisch passieren. Weiß jemand wo der Wurm drin steckt?

  • Dann lass das löschen doch einfach per Timer-Unit oder schnöde crontab jede Nacht laufen ...

    OK das ist eine gute Idee. Da muss ich aber ein Skript erstellen. Ich habe das noch nicht gemacht, und wenn ich sehe, dass ich hier einen Löschbefehl sende, wird mir als Anfänger nicht gerade warm ums Herz...

    OK das habe ich herausgefunden:

    Mit Nano ein Skript anlegen.

    Als Vorlage habe ich das gefunden:

    Bash
    #!/bin/bash
    echo "starting reboot"
    shutdown -r +1
    sleep 180

    ersetze ich durch diese Zeilen:

    Bash
    #!/bin/bash
    echo "sudo find /Kamera/Mobil* -mtime +22 -exec rm {} \;; sudo find /Kamera/Eingang* -mtime +22 -exec rm {} \;"

    Anlegen und speichern an diesem Ort: /bin/bash (Ordner bash gibt es im bin aber nicht?

    dann habe ich ein Skript, was ich 1x am Tag ausführen lassen kann über Crontab.

    Ist das korrekt?

    Wo muss die Datei angelegt werden?

    PS: Vielen Dank für eure Geduld. Es ist aber auch für Anfänger eine Geburt wenns nicht läuft :danke_ATDE:

  • #!/bin/bash ist kein Ordner, das ist ein Shebang.

    Das Skript selbst kannst Du im Prinzip ablegen, wo Du willst.

    Ich lege es i.d.R. in den home Ordner des Benutzers. Wichtig ist aber, das Du im Eintrag in der crontab den vollständigen, absoluten Pfad angibst.

    Wenn es im home Ordner von pi liegt und delxxx.sh heisst, dann muss in die crontab Zeile /home/pi/delxxx.sh, evtl. noch mit den notwendigen Parametern (ich weiß nicht, ob Du Dein Skript mit Parametern versiehst).

    Gruss

    Edit: Kleine Korrektur: /bin/bash im Shebang ist die Pfadangabe zum zu benutzenden Interpreter.

    Einmal editiert, zuletzt von FSC830 (22. Februar 2023 um 09:09)

  • Man benutzt in crontabs/Scripten besser kein sudo. Benutze roots crontab oder die systemweite, wenn es erhöhte Rechte oder einen anderen User benötigt.

    GNU-find kennt "-delete". Das ist evtl. sicherer zu nutzen, als "-exec rm ....", weil das Quoting bei merkwürdigen Dateinamen einem keinen Streich spielen kann.

    Wenn du nichts zu sagen hast, sag einfach nichts.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!