Mit Cronjob alle paar Minuten auf USB Platte schreiben

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

    ich hatte das vor paar Tagen schon mal in nem erleidigten Thema angefragt, aber da gabs keine Reaktionen, da ich mir eh nicht sicher war obs noch zu dem Thema gehört also hier nen neues Thema.

    Ich hab das Problem das sich meine Toshiba Store Basic nach sehr kurzer Zeit in Standby geht und das Pi dann nicht mehr drauf zugreifen kann. Beim Versuch zu zugreifen hängt sich das Pi dann auf.
    Nach diversen Versuchen die Standby Zeit zu ändern war meine Idee ein Cronjob zu machen der alle paar Minuten ne Datei auf die Platte schreibt und somit der Standby verhindert wird.

    [font="Tahoma, Verdana, Arial, sans-serif"]Leider funktioniert mein Versuch nicht und ich weiß auch nicht so richtig was ich anders machen soll.[/font]

    Mein Crontab sieht so aus


    Und mein Script sieht so aus


    Code
    GNU nano 2.2.6           File: /home/pi/script.sh
    
    
    #!/bin/bash
    
    
    touch /media/Kelly/cron_files/temp.txt
    
    
    exit 0

    Ich hoffe ihr könnt mir hier weiterhelfen.

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • Mit Cronjob alle paar Minuten auf USB Platte schreiben? Schau mal ob du hier fündig wirst!

  • Der crontab Eintrag ist falsch:

    Code
    * /2  * * * *   root    /home/pi/script.sh


    Da ist ein Leerzeichen zu viel zwischen * und /2
    Richtiger wäre:

    Code
    */2 * * * *   root    /home/pi/script.sh


    Aber sicher das es alle 2 Minuten sein muss?


    Prüf am besten im /var/log/syslog ob das Script auch alle 2 Minuten ausgeführt wird - und ob das Script ausführbar ist

    wenn ja dann änder im script.sh

    Code
    touch /media/Kelly/cron_files/temp.txt


    in:

    Code
    echo 1 > /media/Kelly/cron_files/temp.txt
  • Weil " echo 1 > /bla " die Datei neu schreibt und die Datei auch nicht mehr 0bytes wäre, wärend touch nur den Zeitstämpel erneuert was aber evtl. nicht reicht

    ggf muss man danach auch noch " sync " ausführen um den schreib Cache zu leeren und die Aktion auch tatsächlich geschrieben wird

    • Offizieller Beitrag

    Mit dem sync stimme ich zu, was das echo vs. touch angeht würde ich den Threadstarter gerne bitten beide versionen mal ausprobieren. Für mein verständniss müsste ein touch ausreichen, da eine Zeitstempeländerung ausreichend sein sollte und für mich einen Schreibvorgang darstellt

  • Vielen Dank für die schnellen Antworten.
    Habe jetzt erstmal das Leerzeichen rausgenommen. Funktioniert aber weiterhin nicht.
    Konnte aber auch noch nicht in die logdatei gucken was dort steht. Trotzdem hätte ja eine Datei da sein müssen.
    Werde morgen Nachmittag den Echo Befehl probieren.
    Wie muss der synch Befehl aussehen und muss der gemacht nur beim Echo gemacht werden?

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • Was passiert denn wenn du das Script manuell ausführst? Kommt da vielleicht eine Fehlermeldung ala "Permission denied"?

    Den sync befehl musst du nach dem touch oder echo ausführen und bedarf keiner weiterer Parameter

    sync bewirkt:

    Zitat

    Das Schreiben geänderter Blöcke auf die Platte erzwingen, den Super-Block aktualisieren.

    Für die vollständige Dokumentation starten Sie:
    info coreutils 'sync invocation'

    • Offizieller Beitrag

    Oder du kombinierst das gleich in einem Befehl

    Code
    echo 1 > /media/Kelly/cron_files/temp.txt && sync

    Allerdings muss erstmal geklärt werden, wie meigrafd schon schreib, warum das Script das nicht ausführt. Er hat aber auch weiter oben schon den syslog hingewiesen wo du auch die Fehlermeldung sehen solltest.

    ich leite meine crons immer manuell direkt die logs

    Code
    */2 * * * *   root    /home/pi/script.sh > /home/pi/script.log

  • ich leite meine crons immer manuell direkt die logs

    Code
    */2 * * * *   root    /home/pi/script.sh > /home/pi/script.log

    Das leitet aber nur stdout um nicht stderr ;) Also nur eine mögliche Ausgabe aber keine Fehlermeldung

    Da fehlt also noch die Umleitung vom stderr auf den stdout:

    Code
    */2 * * * *   root    /home/pi/script.sh > /home/pi/script.log 2>&1
  • So ich hab jetzt mal in das syslog geguckt und es scheint als würde mir MTA fehlen. Was auch immer das bedeutet

    Code
    Oct 11 18:35:59 raspbmc cron[1478]: (CRON) INFO (pidfile fd = 3)
    Oct 11 18:35:59 raspbmc cron[1484]: (CRON) STARTUP (fork ok)
    Oct 11 18:35:59 raspbmc cron[1484]: (CRON) INFO (Running @reboot jobs)
    Oct 11 18:36:01 raspbmc CRON[1486]: (root) CMD (   /home/pi/script.sh)
    Oct 11 18:36:01 raspbmc CRON[1485]: (CRON) info (No MTA installed, discarding output)
    Oct 11 18:36:06 raspbmc kernel: bcm2708 watchdog, heartbeat=10 sec (nowayout=0)
    Oct 11 18:38:01 raspbmc CRON[1510]: (root) CMD (   /home/pi/script.sh)
    Oct 11 18:38:01 raspbmc CRON[1509]: (CRON) info (No MTA installed, discarding output)

    Wie führe ich denn ein Script manuell aus?


    Mit echo

    Bash
    #!/bin/bash
    
    
    echo 1 > /media/Kelly/cron_files/temp.txt && sync
    
    
    exit 0


    krieg ich folgende Meldung

    Code
    /bin/sh: 1: /home/pi/script.sh: Permission denied

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

    Einmal editiert, zuletzt von Piimp (11. Oktober 2013 um 18:57)

  • Die MTA Meldung kommt weil es mit dem Script eine Fehlermeldung gibt -> Permission denied

    MTA bedeutet: Mail Transfer Agent ... cron würde normalerweise bei Fehlern eine EMail verschicken ... aber das kannst du denk ich erstmal ignorieren da du ja nun den Fehler des Scripts selber festgestellt hast

    Allerdings wundert es mich nun wieso du das bash script mit sh ausführst? :)
    Bist du sicher das du das Script ausführbar gemacht hast? -> chmod +x /home/pi/script.sh
    Wenn ja kannst du "sh" nämlich auch weglassen...

    however, deine Zeile im Script scheint kein Recht zu haben /media/Kelly/cron_files/temp.txt zu beschreiben

    Poste mal bitte die Ausgabe vom folgenden Befehl:
    (bitte in Kode)

    Code
    ls -la /media/Kelly/cron_files

    Wenn das Verzeichnis nur lese Rechte hat, müsstest du in deinem Script vor dem Schreiben auch noch die Rechte prüfen und ggf anpassen:

    Bash
    #!/bin/bash
    
    
    [ $(stat -c %a /media/Kelly/cron_files/) -lt 222 ] && chmod 666 /media/Kelly/cron_files/
    echo 1 > /media/Kelly/cron_files/temp.txt && sync
    
    
    exit 0
  • Ah Ok, das erklärt warum die MTA Meldung bei der WEiterleitung in die log Datei nicht mehr kommt.

    Code
    root@raspbmc:~# ls -la /media/Kelly/cron_files
    total 4
    drwx------ 1 pi pi    0 Sep 20 17:32 .
    drwx------ 1 pi pi 4096 Sep 20 17:32 ..


    .sh benutze ich da das in dem Cronjob Tutorial hier im Forum benutzt wurde. :)

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • .sh ist nur die Dateiendung aber du führst sh /home/pi/script.sh aus, das störte mich ;)

    Wie die Dateiendung lautet is schnurz (könnte auch weggelassen werden) solange im Script in der ersten Zeile der Interpreter oder auch Shebang genannt, steht: #!/bin/bash ... und die Datei ausführbar ist.
    raspi-config ist zB ein sh Script (es gibt verschiedene Interpreter) wo aber auch die Dateiendung weggelassen wurde..
    Wenn das Script ausführbar ist müsstest du es also auch direkt ausführen können: /home/pi/script.sh So wird es ja auch über cron ausgeführt...

    Ich hab in dem Beitrag oben dein Script um eine Zeile erweitert - probier das mal aus

    Es könnte aber auch an dem übergeordneten Verzeichnis /media/Kelly liegen, wenn dort die Schreibrechte fehlen.. Aber probier das erst mal aus und führ dann /home/pi/script.sh aus (ohne sh am Anfang)

  • Ah Ok, aber beim manuellen ausfürhen kommt der selbe Fehler.

    Code
    root@raspbmc:~# /home/pi/script.sh
    -bash: /home/pi/script.sh: Permission denied

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • Dann prüf bitte auch die Rechte des übergeordneten Verzeichnisses:

    Code
    ls -la /media/Kelly

    Und auch die da drüber:

    Code
    ls -la /media

    Ansonsten könnte man das Script auch noch unsauber abändern:

    Bash
    #!/bin/bash
    
    
    chmod -R 666 /media/
    echo 1 > /media/Kelly/cron_files/temp.txt && sync
    
    
    exit 0

    ..unsauber deshalb weil das jedem Benutzer lese+schreib Rechte auf /media/ gibt


    Details zu den Rechten kannst du hier nachlesen: http://wiki.ubuntuusers.de/Rechte#Darstellungsarten


    /EDIT: Hm wobei da fällt mir gerade was auf... Führ mal bitte folgenden Befehl aus und poste die Ausgabe:

    Code
    bash -x /home/pi/script.sh
  • Zitat


    Bist du sicher das du das Script ausführbar gemacht hast? -> chmod +x /home/pi/script.sh


    Ich glaub daran lags.
    Hab das grad gemacht und jetzt funktioniert das Script. Jetzt muss ich nur noch sehen ob mein Plan jetzt auch klappt und die Platte weiter funktioniert.

    Riesen Dank erstmal.

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • Es funktioniert wirklich. Klappt genau so wie ich es mir vorgestellt habe.
    Habe auch sowohl echo als auch touch probiert und es hat beides geklappt.
    Ein ls allerdings reicht nicht aus.

    Nachdem ich gestern eingeschlafen bin während das pi noch lief, hab ich mir heute überlegt ob es eine möglichhkeit gibt das das script nur 3-4 Stunden lang läuft.
    Entweder Zeit basiert oder vlt auch per Zähler, dann müsste ich halt ausrechnen wie oft das Script laufen soll.

    Hat jemand ne idee ob das geht?

    If you play the game of thrones, you win or you die!

    Spoiler anzeigen


    Mein Blog:
    Me and my Raspberry Pi
    Mein System:
    Raspberry Model B
    Raspbmc
    2,5" 1TB Toshiba Festplatte (aktiver USB Hub)
    Per Lan im Netzwerk
    Pi->AVR->TV

  • dbv: *räusper* :D


    Man könnte das Script in crontab so eintragen das es zB nur zwischen 06 Uhr und 24 Uhr ausgeführt wird

    Code
    */2 06-23 * * *   root    bash /home/pi/script.sh

    Es würde also um 06:02 , 06:04 ... bis 23:50 , 23:52 , 23:54 , 23:56 und 23:58 ausgeführt werden, ausserhalb nicht und dann müsste die HDD ja irgendwann "einschlafen" :)

    #/etc/crontab besteht aus 7 Spalten pro Zeile:
    #1 - Minute (0-59)
    #2 - Stunde (0-23)
    #3 - Tag des Monats (1-31)
    #4 - Monat des Jahres (1-12)
    #5 - Tag der Woche (0-6, 0 ist Sonntag)
    #6 - Auszuführender Benutzer

    #7 - Absoluter Pfad zum Script


    Genauere Details bezüglich crontab kann > hier < nachgelesen werden

Jetzt mitmachen!

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