Crown-Job? Oder wie geht das?

Dieses Thema im Forum "Computer & Internet" wurde erstellt von engeldane, 25. Juni 2013.

  1. engeldane

    engeldane Gast

    Moin Moin zusammen, ich habe eine Frage:

    Ich habe eine IP-Cam als Überwachungskamera aufgestellt und diese mach mittels Bewegungsmelder Bilder sobald sich was in ihrem Sichtfeld bewegt. Diese Bilder wieden dann auf einem Webspace gespeichert.

    Soweit so gut, aktuell sind ~70.000 Bilder auf dem Webspace, 30-35kb das Stück.

    Gibt es eine Möglichkeit Bilder automatisch zu löschen? Sei es nach einer gewissen Zeit oder auch nach einer bestimmten Stückzahl? Also z.B. nach einem Monat oder nach 50.000 Stück?

    Hab da bei meinem Domainabieter sogaenannte Crown-Jobs frei, die sollen ja gewissen Aufgaben in regelmäßigen Abständen ausführen. Leider weiß ich nicht wie so was geht bzw wie aufwändig sowas ist. Ist das arg kompliziert?

    Kann mir da jemand wieterhelfen?

    Aktuell lösche ich einemal im Monat den Space manuell
     
  2. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    Zunächst einmal heißen die Dinger Cron Jobs und nicht Crown ;) Ausführen einer beliebigen Aufgabe (sprich ein Befehlsaufruf) nach beliebigem Zeitplan.

    Was steht dir denn zur Verfügung? Konsolenzugriff, also (ba)sh Skripte, PHP, Perl, Python, ...? Bei Webspace tippe ich mal auf PHP, entsprechend ein paar Zeilen zusammenschreiben, die im Verzeichnis nach beliebigen Kriterien löschen (Alter, Name, Anzahl...) Käme dann natürlich noch auf die Zugriffsrechte an...

    Kann dir bei Bedarf schnell was zusammenschreiben, wenn du mir sagst, was du hast und was du genau tun möchtest.
     
  3. SmartMarc

    SmartMarc Forums Inventar

    Registriert seit:
    18. September 2004
    Beiträge:
    2.555
    Zustimmungen:
    0
    Ort:
    Cologne, Germany
    Für cron braucht man doch eh ne shell?

    Daher würde dieser cronjob an jedem ersten des Monats alles löschen, was seit als 90 Tagen nicht mehr geöffnet wurde:

    0 1 1 * * find /PFAD_DER_BILDER/ -type f -atime +90 -exec rm -f {} \;

    Das sollte zwar richtig sein, ich übernehme aber keine Verantwortung - bitte vorher testen:

    find /PFAD_DER_BILDER/ -type f -atime +90 -exec ls -lu {} \;

    sollte dir eine Liste von Dateien ausspucken, die alle älter als 90 Tage sind
     
    Zuletzt bearbeitet: 26. Juni 2013
  4. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    Nicht zwingend. Es gibt viele Anbieter, die das den Kunden grafisch per Weboberfläche anbieten ohne Shell-Zugriff (tu ich z.B. auch). Kommt dann wie gesagt auf die Zugriffsrechte an, mit denen man ausführen darf, ob mit den eigenen Nutzer (wie er z.B. ür FTP verwendet wird) oder nur mit dem des Webservers.
    Gibt sogar Drittanbieter, die zeitgesteuerten URL-Aufruf gegen Geld oder auch kostenlos zur Verfügung stellen (cronjob.de, cron-job.org, ...)
     
  5. TS
    engeldane

    engeldane Gast

  6. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    OK, SSH Zugriff ist vorhanden, scheinbar sind dort aber keine tieferen Kenntnisse vorhanden... Datei könnte man auch per FTP hochladen, wenn die Cronjobs per Webinterface konfigurierbar sind, müsste es ohne SSH gehen.

    Die Zeile von SmartMarc sieht schonmal ganz gut aus. Könnte man in ein Shellskript packen, also z.B.:
    #!/bin/bash
    find /PFAD_DER_BILDER/ -type f -atime +90 -exec rm -f {} \;


    /PFAD_DER_BILDER/ entweder absolut (mit / am Anfang, wäre dann herauszufinden) oder relativ zum Skript (ohne / am Anfang), wenn es der selbe Ordner sein sollte "./"
    Beachte auch, rm (Löschbefehl) ist quasi irreversibel.

    Die Datei z.B. als "pic_cleanup.sh" speichern und ggf. mit dem Aufruf "chmod +x pic_cleanup.sh" ausführbar machen. Alternativ per FTP die Dateirechte bearbeiten und das Ausführbar-Flag setzen.

    Wie du das bei all-inkl als Cronjob einträgst weiß ich nicht auswendig, habe auch grade nicht die Zeit übrig mir einen Testaccount dafür zu bestellen.. Am einfachsten ginge es, das Skript in's /etc/cron.monthly Verzeichnis zu speichern (wobei dann 90 Tage keinen Sinn machen würden, eher 30) oder mit der Zeitangabe vorweg (siehe oben) eine neue Datei im /etc/cron.d anlegen.
    Wenn du die per Webinterface einrichten musst, Zeit einstellen und den Pfad zum Skript eintragen.

    Du könntest auch noch etwas Komfort drumbasteln, z.B. dir mit
    COUNT=`find /PFAD_DER_BILDER/ -type f -atime +90 -print | wc -l`
    die Anzahl der zu löschenden Dateien holen und per Mail einen Statusreport an dich senden:
    echo "Es wurden $COUNT Dateien gelöscht" | mail deine@mailadres.se
     
    Zuletzt bearbeitet: 26. Juni 2013
  7. SmartMarc

    SmartMarc Forums Inventar

    Registriert seit:
    18. September 2004
    Beiträge:
    2.555
    Zustimmungen:
    0
    Ort:
    Cologne, Germany
    Ist doch Wumpe, wann und wie oft der Cronjob ausgeführt wird - mit 90 Tagen bleiben immer mindestens die letzten 3 Monate erhalten, selbst wenn das Skript stündlich läuft. Einziger Unterschied ist der Overhead zwischen den Löschvorgängen.

    Ich hätte jetzt einfach "crontab -e" per SSH eingegeben und dann in meinem letzten Post genannte Zeile eingegeben (nachdem ich das vorher mit "ls -lu" getestet hätte)
     
    Zuletzt bearbeitet: 26. Juni 2013
  8. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    Wo du Recht hast... Zu viele verschiedene Baustellen um noch klar zu denken ;)

    Ob das auf diese Weise geht, hängt natürlich von den Zugriffsrechten ab, bei Webspace mit SSH könnte ich mir durchaus vorstellen, dass man keinen direkten Zugriff auf die Crontab hat, würde ich zumindest nicht erlauben. Vielleicht ist es auch ein persönliches Cron-Verzeichnis, das nach dem Prinzip cron.d abgefragt wird... Aber wozu die Spekulation, wir werden vermutlich bald erfahren, was geht, Möglichkeiten wurden ja 4 genannt.
     
  9. TS
    engeldane

    engeldane Gast

    allinklcronjob.jpg

    so sieht das Teil bei All-Ink aus.

    Hab leider kein Programmierkentnisse mehr, an der FH gabs mal etwas SQL und PHP, aber das ist alles schon lang lang her.

    :gruebel:

    Muss ich jetzt die Zeilen in eine TXT reinkopieren, die Verzeichnisse anpassen, dann die Datei in ***.sh umbenennen und dann hochladen? Was muss ich dann in der Weboberfläche eintragen?

    Sorry, ist etwas zu hoch für mich
     
    Zuletzt von einem Moderator bearbeitet: 26. Juni 2013
  10. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    Dachte ich's mir doch, so viel Freiheit hat man bei den Space-Paketen nicht. Dann käme ein PHP-Skript auf dem Webserver in Frage. Oder kannst du oben bei Protokoll/Typ etwas anderes als http(s) auswählen?

    Das hier als irgendwas.php abspeichern, z.B. in einem passwortgeschützten Verzeichnis. Pfad anpassen, genauso wie die Zeitangabe. Sollte nicht im gleichen Ordner liegen wie die Bilder, sonst ist's nach 90 Tagen weg ;)
    PHP:
    <?php
    $counter 
    0;
    $ordner dir('/pfad/zu/den/bildern/');
    while (
    $datei $ordner->read()) {
        if (
    filetype($ordner.$datei) != "dir") {
           if (
    strtotime("-90 days") > @filemtime($ordner.$datei)) {
               @
    unlink($ordner.$datei);
              
    $counter++;
          }
       }
    }
    $ordner->close();
    echo 
    $counter;
    ?>
    Die @unlink... Zeile ist zum Löschen, die würde ich ergo zum Testen erstmal weglassen. Gibt dann die Anzahl der zu löschenden Dateien aus.
    Wenn alles psäter läuft die Zeile mit reinnehmen, die letzte (echo...) kann man dann entfernen.

    Als Cron URL dann den Link zum Skript angeben, wenn Passwortgeschützt unten die Zugangsdaten dazu.


    PS: hab's nicht getestet, sollte sich mit Fehlern melden, wenn etwas nicht klappt.
     
    Zuletzt bearbeitet: 27. Juni 2013
  11. Chakky

    Chakky Forums Profi

    Registriert seit:
    5. Dezember 2008
    Beiträge:
    663
    Zustimmungen:
    2
    Ort:
    Chemnitz, Germany
    Code:
    @unlink($ordner.$datei);
    
    unterdrückt nur ggf fehlermeldungen/statusmeldungen und führt den befehl trotzdem, um zu testen würde ich das @ erstmal entfernen da siehst du ggf die meldungen. ich würde es erstmal mit
    Code:
    //
    [code] 
    auskommentieren und schauen welche dateien wirklich gelöscht werden  eh ich das script scharf stellen würde.
    
    dann kommt es noch drauf an ob überhaupt der unlink befehl gestatte ist auf dein system
    
    schreib mal in eine neue datei namens info.php bitte mal folgende code zeile
    [code]
    <?php phpinfo();?>
    
    und poste uns entweder die komplette ausgabe (achtung kann vertrauliche infos enthalten) oder schick uns per PN mal den link um zu sehen was überhaupt auf deinen webspace möglich ist.
     
  12. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    Ja, das @ könnte zum Testen raus, hinterher würde ich es aber mit reinnehmen, da das Skript sonst nur unnötig Output produzieren könnte. Oder vielleicht auch eine Konstruktion zur Fehlererkennung drumbauen:
    PHP:
    if( !@unlink($ordner.$datei) ) echo "Fehler beim Löschen der Datei ".$datei;
    oder für den Automatikbetrieb mit E-Mail Benachrichtigung
    PHP:
          if( !@unlink($ordner.$datei) ) $error .= $datei.', ';
    ...
     if(
    $errormail 'deine@ema.il' 'Betreff' 'Fehler beim Löschen der folgenden Dateien: '.$error);
    Ich könnte mir sowieso vorstellen, dass mit den aktuellen Dateirechten so nicht passt, wäre zumindest etwas fahrlässig, wenn. Sind die Bilder dem Webserver momentan zugänglich oder liegen die in einem privaten Verzeichnis?
     
    Zuletzt bearbeitet: 27. Juni 2013
  13. TS
    engeldane

    engeldane Gast

    Teste ich gleich mal

    Noch sind sie zgänglich, hab die Kamera jetzt erstmal zum laufen gebracht. Später würd ich es natürlich gern schützen (wenns geht)

    EDIT: kann nur http und https auswählen
     
  14. TS
    engeldane

    engeldane Gast

    schreib mal in eine neue datei namens info.php bitte mal folgende code zeile
    Code:
    <?php phpinfo();?>
    

    Welchen Teil brauchst du denn?



    Das kommt raus wenn ich den angepassten Job starte
     
    Zuletzt von einem Moderator bearbeitet: 27. Juni 2013
  15. 404

    404 Forums Inventar Forenspender

    Registriert seit:
    22. Juli 2009
    Beiträge:
    4.155
    Zustimmungen:
    100
    Geschlecht:
    männlich
    Ort:
    Aachen, Deutschland
    DOCUMENT_ROOT könnte interessant sein für den Pfad (siehe unten), evtl. noch open_basedir, safe_mode, ...


    Zum Fehler:
    In Zeile 3 kann der Ordner nicht geöffnet werden, in Zeile 4 daraus folgend auch nicht gelesen... Du hast den falschen Verzeichnispfad angegeben.
    dir(http://www.domain.de) ergibt wenig Sinn, es sollte eher ein Systempfad sein und nicht der externe über die Domain.
    Wenn die Bilder im selben verzeichnis liegen wäre es z.B. dir('./'),
    im Verzeichnis darüber dir('../')
    in einem Unterverzeichnis dir('unterordner')
    oder auch der absolute Systempfad (wie in DOCUMENT_ROOT der phpinfo), also dir('/var/irgendwas/kunde/domain/htdocs/wasweissich/bilder/')
     
  16. TS
    engeldane

    engeldane Gast

    hab ich abgeändert


    teste nochmal
     
  17. TS
    engeldane

    engeldane Gast

    Catchable fatal error: Object of class Directory could not be converted to string in /www/htdocs/*benutzername*/*domain*/pic_cleanup.php on line 5

    verrückte welt, ich fühl mich gerade in die FH zurückversetzt :wand:
     
    Zuletzt von einem Moderator bearbeitet: 27. Juni 2013
  18. Chakky

    Chakky Forums Profi

    Registriert seit:
    5. Dezember 2008
    Beiträge:
    663
    Zustimmungen:
    2
    Ort:
    Chemnitz, Germany
    Probier mal das:

    hab jetzt nur schnell gegoogelt sieht schlüssig aus:

    Code:
    [COLOR=#0000BB][FONT=monospace]<?php
      $dir [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"Testordner"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]; [/FONT][/COLOR][COLOR=#FF8000][FONT=monospace]// Pfad zum Testordner
      [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$fileArray [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= array();
      foreach ([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]glob[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$dir[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"/*"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) as [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$filename[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) {
        [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$diff [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]time[/FONT][/COLOR][COLOR=#007700][FONT=monospace]() - [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]fileatime[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$filename[/FONT][/COLOR][COLOR=#007700][FONT=monospace]); [/FONT][/COLOR][COLOR=#FF8000][FONT=monospace]// fileatime liefert den Unixtimestamp des letzten Zugriffs auf eine Datei
        [/FONT][/COLOR][COLOR=#007700][FONT=monospace]if([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$diff [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1800[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) [/FONT][/COLOR][COLOR=#FF8000][FONT=monospace]// 1800 = 60 sec * 30 min
        [/FONT][/COLOR][COLOR=#007700][FONT=monospace]{
          [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]unlink[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$filename[/FONT][/COLOR][COLOR=#007700][FONT=monospace]);
        }
      }
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]?>
    [/FONT][/COLOR]
    zu beachten wäre das die funktion
    Code:
     glob() 
    nicht überall funktioniert...

    Das löscht einfach alle Dateien die älter als 30 Minuten sind (erstmal nur auf einen testverzeichnis anwenden)
     
    Zuletzt bearbeitet: 30. Juni 2013
  19. TS
    engeldane

    engeldane Gast

    dann kommt ca. 1000000 mal das hier im Browser:

    Warning: unlink(IPCam/00EA08154C53(Dullenberg)_1_20130701165622_21629.jpg) [function.unlink]: Permission denied in /www/htdocs/*benutzer*/*domain*/pic_cleanup001.php on line 8

    Jedes mal mit einem anderen Dateinnamen der Bilder
     
  20. Chakky

    Chakky Forums Profi

    Registriert seit:
    5. Dezember 2008
    Beiträge:
    663
    Zustimmungen:
    2
    Ort:
    Chemnitz, Germany
    Jo das php script darf die Daten nicht löschen (entweder vom betreiber gesperrt oder was eher zutreffen wird user hat weniger rechte als webserver)

    die ausgabe von phpinfo fehlt uns ja immer noch.

    Ich hoffe du lässt die phpscripte in ein test verzeichnis los nicht in deiner bildsammlung :)