User pi - Kein Recht einen Cronjob auszuführen?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich hatte schon vor einigen Jahren vergeblich einen kleinen, günstigen, stromsparenden Rechner gesucht, der sich als Mediaplayer und für kleine Projekte eignet. Darum habe ich sofort einen Raspbery bestellt, als ich ihn erst neulich entdeckte. Leider war ich bei Linux noch nie über die grafischen Oberflächen hinaus gekommen. Dateistruktur, Userverwaltung und Rechtevergabe irritieren mich noch.


    Projekt 1:
    Der Mediaplayer ließ sich reibungslos einrichten und macht einen besseren Eindruck, als so manch teureres Gerät.

    Projekt 2: Nicht so einfach für mich.
    Mit einer USB Webcam sollen alle x Minuten Bilder auf einen USB Stick im Format JPG gespeichert werden können. Die Bilder sollen danach zu einem Zeitrafferfilm zusammengefügt werden.
    Zunächst will ich damit nur den Katzennapf einige Stunden beobachten lassen. Später soll ein Bauvorhaben über mehrere Wochen immer tagsüber dokumentiert werden.
    Ich bin nach diesem Thread von hier vorgegangen und erfolgreich bis zur Aufnahme über den manuellen Aufruf des SH Skripts gekommen. Den Cronjob konnte ich einrichten, es wurden aber keine Bilder gemacht.

    Die webaufnahme.sh liegt unter /pi und lässt sich aus der Shell, oder per Doppelklick starten. Die Bilder werden damit auch unter /pi gespeichert.

    Scheinbar sind mir aber keine Cronjobs erlaubt.
    In der Hilfe man 5 und über eine Suche, habe ich herausgefunden, dass es an cron.allow liegen könnte. Nur ich habe diese Datei nicht und komme über den Dateimanager kaum in einem Ordner an Schreibrechte. Ein Freischalten über Rechtsklick/Eigenschaften wird meist auch abgelehnt.

    Es ist ein wheezy.img, das direkt in die grafische Oberfläche bootet. Einen User, oder ein Passwort musste ich beim Start bisher nicht verwenden. Wenn ich mich neu einlogge, dann nehme ich den user pi. Damit kann ich zwar auch einen eigenen Cronjob anlegen, der wird mir aber auch nicht ausgeführt. Sudo erleichtert zwar einiges, hat mir beim cronjob aber nicht geholfen. Nachdem ich nun sehr viele Beiträge zum Crontab gelesen habe und es oft genug ausprobiert habe, schließe ich einen Fehler in den Kommandos aus. Eine Logdatei habe ich noch nicht gefunden. An das root Passwort komme ich nicht ran.

    Ich bin kurz davor, das wheezy.img neu aufzuspielen und gleich zu Anfang einen User mit entsprechenden Rechten auszustatten. Aber wie, damit cronjobs ausgefürt werden?

  • normale Benutzer dürfen keine root-Befehle ausführen

    Jeder shellbenutzer hat aber auch eine eigene crontab die er standardmässig natürlich auch nutzen darf... Allerdings kann ich deiner Beschreibung leider nicht entnehmen was genau du gemacht hast?

    Was hast du denn Wo eingetragen?


    Desweiteren kann man anhand der Logdatei /var/log/syslog herausfinden ob die crontab Zeile ausgeführt wurde oder ob es da ggf Probleme mit gibt

  • Hallo

    Zitat


    [font="Tahoma"]An das root Passwort komme ich nicht ran.[/font]


    Wieso nicht? Das ist DEINE Maschine!


    Zitat


    [font="Tahoma"]Ich bin kurz davor, das wheezy.img neu aufzuspielen und gleich zu Anfang einen User mit entsprechenden Rechten auszustatten. Aber wie, damit cronjobs ausgefürt werden?[/font]

    Cronjob geht immer. Einen neuen User einrichten kann in der tat nur der root.

    Manchmal liegt es aber auch am Format der Befehlszeile in der Crontab selbst.

    Es gibt "crons" z.B. cronie, die keine Prozentzeichen mögen, die muss man dann abfangen, escapen, oder so heißt das wohl. Sieht dann so aus:

    14,29,44,59 * * * * /home/testman/one_wire/process.sh `date +\%Y-\%m-\%d`

    Die geschriebene Datei bekommt hier ein Datum in den Dateinamen, vermittels "date", die für das entsprechende Format nötigen Prozentzeichen mussten escaped werden. ==> % wird zu \%

    Wenn man das nicht macht, wird das auch nicht ausgeführt, das nur als Hinweis für dein Problem, eventuell ist das bei dir ähnlich.

    Wer ist denn der User pi? Welche Rechte hat der? Darf der z.B. das Datum und die Zeit setzen? Dann ist er nämlich der root. root kann auch ohne Passwort verwendet werden, sollte aber natürlich nicht so sein. Manche Linuxe machen das aber, warum auch immer.

    Irgendwie lässt sich das Problem bestimmt lösen. Windowsmäßig deinstallieren und neu installieren ist eigentlich nicht erforderlich und ein Zeichen von Schwäche :)

    Sorry, ich konnte nicht widerstehen.

    Bye

  • Zitat


    Was hast du denn Wo eingetragen?

    Ich habe als User pi crontab –e eingegeben und dort alles Mögliche ausprobiert, das ich über Google gefunden hatte. Meist verwendete ich */5**** /home/pi/meine.sh für alle 5 Minuten. Die Shell gibt bei Fehlversuchen eine Meldung aus, wenn ihr eine versuchte Zeile zum Erstellen nicht gepasst hat und bietet über Auswahl y/n an crontab erneut zu öffnen.
    Durch die vielen Versuche, kann fast nicht mehr nachvollziehen was ich schon alles eigegeben habe. Ich hab diese Woche wahrscheinlich nicht so viel Zeit, um mich 3 Stunden am Stück an den Raspberry zu setzen. Bei jeder Gelegenheit lese ich mich aber in die Shell ein, um am WE einen neuen Anlauf zu starten. Ich glaube, dass ich in der Shell mal chmod -x webcamaufnahme.sh eingegeben hatte, sie ließ sich aber manuell ausführen, darum bin ich mir nicht sicher. Mittlerweile habe ich verstanden, dass +x wichtig gewesen wäre. Vielleicht wäre chmod g+x am besten.

    Zitat


    An das root Passwort komme ich nicht ran.


    Noch sitzt eher die Maschine am Steuer, ich muss erst für den Führerschein büffeln.

    Zitat


    Wer ist denn der User pi?


    Das ist der Standarduser des speziellen Wheezy.img für den Raspberry.

    Zitat


    Welche Rechte hat der?


    Wenn ich das genau wüsste….
    Ausserhalb des home-Verzeichnisses darf er im Dateimanager anscheinend nicht viel. Pi ist scheinbar auf die Shell und sudo angewiesen. Wenn ich mit der Shell fitter bin, dann finde ich es bestimmt heraus.

    Zitat


    Irgendwie lässt sich das Problem bestimmt lösen.


    Ja das denke ich auch, da es bei vielen anderen Raspberrys auf Anhieb zu klappen scheint.
    Bisher war es bei jeder für mich neuen Programmiersprache so, dass ich am Anfang bei jeder Kleinigkeit auf scheinbar große Hürden gestoßen bin, die mit etwas Wissen keine mehr waren. Nebenbei lerne ich bereits vieles über Linux dazu, mit dem ich mich ohne Startprobleme nicht beschäftigt hätte.

    Ich gehe jetzt mal weg von dem Webcamprojekt und lasse den Cronjob alle 5 Min. nur eine Textdatei beschreiben.

    Bash will ich ja auch noch lernen.
    Passt das so?

    Code
    #! /usr/bin/sh
    echo "test" >> crontest.txt
    • Offizieller Beitrag

    serienmässig hat der user root kein passwort und man kann sich dementsprechend auch nicht als root anmelden.

    Code
    sudo su
    passwd

    Nun hat der user root ein pw und du kannst dich per ssh direkt als root anmelden. Aber Obacht: root vergibt nicht ;).

    Der user pi darf in seinem homeverzeichnis machen was er will, den rest darf er sich ansehen aber nichts ändern. Dadurch das er in sudoers datei steht, kann er sich über sudo für den jeweiligen befehl root rechte holen und ihn dann trotzdem ausführen ( für das system ist pi dann root)

    Lass bei deinem Script in der ersten Zeile, der sogenannten Shebang, noch das Leerzeichen weg. Ich würde den direkten pfad der crontest.txt reinschreiben

    Code
    echo "test" >> /home/pi/crontest.txt

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (12. August 2013 um 21:04)


  • Meist verwendete ich */5**** /home/pi/meine.sh für alle 5 Minuten.


    zwischen den Sternchen gehört jeweils ein Leerzeichen

    # Ein Benutzer-Crontab-File besteht aus 6 "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 - Absoluter Pfad zum Script

    Also zB:
    */5 * * * * /home/pi/meine.sh

    Zitat von Yan


    Ich glaube, dass ich in der Shell mal chmod -x webcamaufnahme.sh eingegeben hatte, sie ließ sich aber manuell ausführen, darum bin ich mir nicht sicher. Mittlerweile habe ich verstanden, dass +x wichtig gewesen wäre. Vielleicht wäre chmod g+x am besten.


    chmod +x reicht eigentlich. Alternativ kannst du aber auch chmod 755 oder chmod 777 setzen..
    Wenn du das Script aber manuell ausführen kannst ( mit: /home/pi/meine.sh ) wird es auch crontab ausführen können..

    Zitat von Yan


    Noch sitzt eher die Maschine am Steuer, ich muss erst für den Führerschein büffeln.


    Hehe ;)
    Entweder ist es noch das Standard Password " raspberry " , oder " raspberrypi " , oder es ist noch garkeins gesetzt - in jedemfall kannst du das problemlos mithilfe des " pi " Benutzers neu setzen über folgenden Befehl:

    Code
    sudo passwd root

    ...alle weiteren Fragen die tuboletti gestellt hat kann man aber ignorieren, der hat leider allg. sehr viel Quatsch geschrieben :(

    Zitat von Yan

    Bisher war es bei jeder für mich neuen Programmiersprache so, dass ich am Anfang bei jeder Kleinigkeit auf scheinbar große Hürden gestoßen bin, die mit etwas Wissen keine mehr waren. Nebenbei lerne ich bereits vieles über Linux dazu, mit dem ich mich ohne Startprobleme nicht beschäftigt hätte.

    Ich gehe jetzt mal weg von dem Webcamprojekt und lasse den Cronjob alle 5 Min. nur eine Textdatei beschreiben.

    Bash will ich ja auch noch lernen.
    Passt das so?

    Code
    #! /usr/bin/sh
    echo "test" >> crontest.txt

    Ja das ist quasi normal das man beim erlernen neuer Programmiersprachen immer wieder an Klinigkeiten stunden verballert :s , passiert mir auch immer wieder :daumendreh2: :-/

    Bei deinem Script passt der SheBang nicht: #! /usr/bin/sh
    /usr/bin/sh gibts beim RaspBian nicht.. Findest du mit folgendem Befehl raus:

    Code
    find / -name sh


    Korrekt wäre also wenn dann: #! /bin/sh
    (das Leerzeichen ist Oke aber eher nicht gebräuchlich)

    Ich nutze immer " #!/bin/bash " da bash neuer und besser ist, kann auch mehr als sh

    Der sog. SheBang ist quasi der Interpreter, der Verarbeiter des Codes: http://de.wikipedia.org/wiki/Shebang


    Das wäre ggf die Erklärung wieso Cron das script nicht ausführen kann, da es /usr/bin/sh nicht gibt :rolleyes:

    Das kannst du auch über folgenden Befehl prüfen ob crontab Probleme beim Ausführen hat:

    Code
    grep CRON /var/log/syslog
  • Es hat mit der Textdatei und euren Tipps innerhalb von 15 Min. geklappt!
    Ich habe der Textdatei zusätzlich u+r und u+w zuweisen.
    Jetzt kann ich mich bald wieder der Webcam zuwenden.


    :danke_ATDE::D

    Ich setze das Thema auf erledigt, kann aber sein, dass ich mich mit der Webcam nochmal melden muss.

  • Jetz hab ich per Cronjob ab 20 Uhr jede Minute ein Bild speichern lassen, es sollte um 21 Uhr aufhören - läuft aber munter weiter.


    Code
    */1 20-21 * * * /home/pi/bilder1/webcamaufnahme1.sh

    :helpnew:

  • Cron macht das schon richtig, du wolltest die 20. und auch die 21. Stunde für deinen Cronjob nutzen...

    Versuch mal */1 20 * * * /home/pi/bilder1/webcamaufnahme1.sh

  • Danke, da wäre ich heute nicht mehr drauf gekommen.

    */1 20 * * * bedeutet dann ``Starte das Script in jeder Minute der 20 Stunde, jeden Tages, jeden Monats und jeden Jahres.

    Wenn es z.B. von 7 bis 19 laufen soll, dann müsste es heißen: ``*/1 7-18 * * *´´, weil er die 18. Stunde voll abarbeitet.
    Wie immer, programmieren ist im Nachhinein eigentlich ganz leicht.


  • */1 20 * * * bedeutet dann ``Starte das Script in jeder Minute der 20 Stunde, jeden Tages, jeden Monats und jeden Jahres.

    Wenn es z.B. von 7 bis 19 laufen soll, dann müsste es heißen: ``*/1 7-18 * * *´´, weil er die 18. Stunde voll abarbeitet.
    Wie immer, programmieren ist im Nachhinein eigentlich ganz leicht.

    anstatt */1 kannst du auch gleich nur * machen, was dann auch bedeutet "jede minute"
    das "*/ " macht man erst ab: */2
    damit es auf alle 2 minuten zutrifft

    Wenn es nur für einen bestimmten Zeitraum (7Uhr bis 19Uhr) laufen kannst du das auch so machen:

    Code
    * 7,8,9,10,11,12,13,14,15,16,17,18 * * *  /bin/befehl


    Dann gibst du die Stunde vor in der es ausgeführt werden soll

    Somit könntest du also auch über nur einen Crontabeintrag festlegen das er ab 7 Uhr morgends eine Stunde lang und nochmal Abends ab 18 Uhr eine Stunde lange den Befehl ausführen soll:

    Code
    * 7,18 * * *  /bin/befehl

    Das kleinste womit Cron umgehen kann sind aber nur Minuten, wenn du Sekunden brauchst musst du dir dafür am besten ein weiteres Script schreiben was dann zB dein Befehl durch eine while Schleife und am Ende der Schleife durch "sleep 10", 10 Sekunden angehalten werden würde - er würde dann also den Befehl alle 10 Sekunden ausführen:

Jetzt mitmachen!

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