Script per Cronjob ausführen - Raspberry

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
motte3009
User
Beiträge: 10
Registriert: Sonntag 17. März 2013, 20:37

Hallo !

Ich hoffe mal, ich bin hier richtig.... Bin absoluter Frischling, was Linux und das Programmieren mit Python angeht...

Habe einen Raspberry Pi in Betrieb, es ist Raspian installiert.

Ich habe bis jetzt einige kleine Scripte in Python geschrieben, welche unter Root und auch unter PI (mit sudo) einwandfrei funktionieren.

Mein Problem: Ich möchte diese Scripte per Cronjob laufen lassen, nur leider bekomme ich das nicht hin.

Ein Beispiel:

Code: Alles auswählen

#!/usr/bin/python

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BOARD)

GPIO.setup(24, GPIO.OUT)

var=1

while var==1 :

  GPIO.output(24, False)
  time.sleep(1)

  GPIO.output(24, True)
  time.sleep(1)
Das Script liegt unter /home/pi/wetterstation/led/status.py und hat auch die nötigen Rechte (775) erhalten.

Ein anderes Script liest einen Temperatursensor aus, steuert eine LED für 5 Sekunden an und schreibt das Ganze in eine TXT.

In der Crontab (unter User PI) stehen testweise folgende Einträge:

*/2 * * * * /home/pi/wetterstation/sensoren/abfrage.py
*/2 * * * * /home/pi/wetterstation/led/status.py


Er macht es nicht. Ich lese mir jetzt mittlerweile eine gute Woche `nen Wolf, finde aber keine Lösung...

Könnt ihr mir helfen ? Danke !

Motte
Zuletzt geändert von Anonymous am Sonntag 17. März 2013, 21:01, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@motte3009: Also bei den ``crontab``-Einträgen fehlt zumindest schon mal der Benutzer unter dem das ausgeführt werden soll.

Und dann könntest Du mal in ``/var/log/daemon.log`` schauen ob und was der ``cron``-Daemon da so reinschreibt wenn er das ausführen soll.

`var` ist übrigens überflüssig. Da hättest Du gleich ``while 1 == 1:`` schreiben können. Und diese Bedingung ist auch irgendwie sinnfrei, denn man *weiss* ja das da *immer* `True` bei herauskommen wird. Also ``while True:``.
motte3009
User
Beiträge: 10
Registriert: Sonntag 17. März 2013, 20:37

Hallo BlackJack,

danke für deine Antwort.

Hab es auch schon so in der Crontab probiert:

Code: Alles auswählen

*/2 * * * * pi python /home/pi/wetterstation/led/status.py
Und so auch schon:

Code: Alles auswählen

*/2 * * * * pi sudo /home/pi/wetterstation/led/status.py
Oder so:

Code: Alles auswählen

*/2 * * * * /home/pi/wetterstation/led/status.py
Er will einfach nicht.

In Cron.log steht etwas davon, das ich "MTA" installieren soll, nur kann mir keiner erlären, was das ist (oder ich bin zu doof dafür)....

Immer wieder lese ich, das ich in der Crontab eigentlich keine Rechte brauche, um ein Script auszuführen. Scheinbar aber wohl doch... Was denn nun.... :-(

Gruss
Motte
BlackJack

@motte3009: MTA = Mail Transport Agent. Das wird aber nicht das einzige sein was dort steht. Die komplette Meldung was passiert wenn versucht wird eines Deiner Skripte auszuführen wäre interessant. Nicht irgendwie so ähnlich abtippen, sondern am besten 1:1 kopieren und einfügen.

Du willst das als Benutzer root ausführen lassen. Ein Sternchen geht an Stelle des Benutzers nicht in der ``crontab`` — welche Dokumentation hat Dich denn auf die Idee gebracht? Und wenn Du ``python`` explizit verwendest, dann solltest Du den ganzen Pfad angeben. Das sollte aber nicht nötig sein wenn der ganze Pfad zu dem Python-Skript angegeben wird und das ausführbar ist.

Und die gesamte ``crontab``-Datei sollte syntaktisch korrekt sein.
motte3009
User
Beiträge: 10
Registriert: Sonntag 17. März 2013, 20:37

Moin, hier der Inhalt der cron.log:

Code: Alles auswählen

Mar 18 19:50:47 raspberrypi /usr/sbin/cron[2190]: (CRON) INFO (pidfile fd = 3)
Mar 18 19:50:47 raspberrypi /usr/sbin/cron[2191]: (CRON) STARTUP (fork ok)
Mar 18 19:50:47 raspberrypi /usr/sbin/cron[2191]: (CRON) INFO (Running @reboot jobs)
Mar 18 19:52:39 raspberrypi /USR/SBIN/CRON[2762]: (pi) CMD (sudo /home/pi/wetterstation/led/status.py)
Mar 18 19:52:39 raspberrypi /USR/SBIN/CRON[2763]: (pi) CMD (sudo /home/pi/wetterstation/sensoren/abfrage.py)
Mar 18 19:52:39 raspberrypi /USR/SBIN/CRON[2761]: (CRON) info (No MTA installed, discarding output)
Mar 18 19:54:01 raspberrypi /USR/SBIN/CRON[2774]: (pi) CMD (sudo /home/pi/wetterstation/sensoren/abfrage.py)
Mar 18 19:54:01 raspberrypi /USR/SBIN/CRON[2775]: (pi) CMD (sudo /home/pi/wetterstation/led/status.py)
Mar 18 19:54:01 raspberrypi /USR/SBIN/CRON[2773]: (CRON) info (No MTA installed, discarding output)
Gruss
Motte
BlackJack

@motte3009: Es gab also Ausgaben bei den Skripten die normalerweise per Mail an den Administrator verschickt werden. Was nur geht, wenn ein MTA installiert ist. Du könntest sämtliche Ausgaben von den Skripten in eine Logdatei umleiten und dann schauen was dort landet.

Code: Alles auswählen

*/2 * * * * pi sudo /home/pi/wetterstation/led/status.py 2>&1 >> /home/pi/wetterstation.log
motte3009
User
Beiträge: 10
Registriert: Sonntag 17. März 2013, 20:37

Hallo BlackJack,

ich habe jetzt unter Root eine Crontab angelegt mit folgendem Inhalt:

Code: Alles auswählen

*/2 * * * * /home/pi/wetterstation/sensoren/abfrage.py 2>&1 >> /home/pi/wetterstation.log
*/2 * * * * /home/pi/wetterstation/led/status.py 2>&1 >> /home/pi/led.log
Komischerweise funktioniert das LED-Script mit einem Mal. (blinkende LED).

Das Script zum Auslesen des Sensors allerdings nicht.

Beide Log-Dateien sind erstellt worden, sie sind allerdings leer.


Gruss
Motte
BlackJack

@motte3009: Dann schreib doch mal ``print``-Ausgaben in das Skript, bis wohin es so kommt und was es so macht. Die landen dann in der Logdatei.
motte3009
User
Beiträge: 10
Registriert: Sonntag 17. März 2013, 20:37

Moin,
leider keine Ausgabe in der Log-Datei... Starte ich das Script von Hand, hab ich eine Menge Ausgaben:

Code: Alles auswählen

Import Klassen ok
LED an ok
Auslesen der drei Sensoren ok
Schreiben in TXT ok
LED aus ok

Temperatur 1 = 19,25 
Temperatur 2 = 19,27
Temperatur 3 = 19,20
Antworten