Cronjob definiert aber keine Funktion

Probleme bei der Installation?
Antworten
RoterMilaniX
User
Beiträge: 5
Registriert: Mittwoch 12. Oktober 2016, 21:58

Hallo @ All,

im Rahmen eines kleinen Wetterstation-Projektes will ich ein Python-Script per Cron beim Start des RPi automatisch starten. Dies funktioniert aber nicht. Hier meine Vorgehensweise an Hand eines Testscriptes Test.py:

Code: Alles auswählen

#!/usr/bin/python

print 'Ausfuehrbar'
Das Testscript ist mit chmod 755 Test.py ausführbar gemacht.

- Ich arbeite auf dem Default-User pi@raspberry.
- Ich logge mich automatisch ein. Das habe ich folgendermaßen eingestellt:

sudo nano /etc/inittab
#1:2345:respawn:/sbin/getty 115200 tty1
1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1

mit crontab -e habe ich einen benutzerdefinierten cronjob erstellt:
@reboot /home/pi/Werkstattklima/Test.py

Beim restart (sudo restart) wird der Betnutzer automatisch angemeldet aber es passiert nichts! Ich hätte die Ausgabe "Ausführbar" erwartet. Hmm?
- Durch den Shebang im Script muss ich ja nicht den python-Interpreter aufrufen.
- Starten in der Komandozeile funktioniert: ./home/pi/Werkstattklima/Test.py > Ausgabe Ausführbar

Es gehr weiter :-)
ich habe auch folgendes getestet:
sudo /etc/crontab
Test1: @reboot pi /home/pi/Werkstattklima/Test.py
Test2: @reboot root /home/pi/Werkstattklima/Test.py

Egal was ich auch probiere das Testcript wird nicht automatisch gestartet :-(

Im syslog steht nach dem Aufruf des Cronjobs: "(CRON) info ()No MTA installed, discarding output)" sonst nichts

Gruß RM
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Die Ausgabe müsste eigentlich per Mail an dich gehen. Was passiert, wenn du 'mail' in einem Terminal aufrufst?

EDIT:: Du kannst ja testweise mal die die Ausgabe per '>'-Umleitung in eine Datei umleiten.
BlackJack

@Liffi: Die Mail geht natürlich nicht raus wenn da im Protokoll „No MTA installed“ steht und „discarding output“.

@RoterMilaniX: Was willst Du denn eigentlich erreichen? Dein Skript wird ziemlich sicher gestartet, aber die Ausgabe wird verworfen, weil für das E-Mail-Handling noch Software nachinstalliert und eventuell konfiguriert werden muss. Aber willst Du die Ausgabe überhaupt per E-Mail bekommen, oder sollte das ein Test sein ob der Cronjob ausgeführt wird? Dann wäre es wie von Liffi vorgeschlagen am einfachsten die Ausgabe in eine Datei umzuleiten.

Sollte damit ein Programm gestartet werden das unter einem Benutzer läuft und irgendwelche Ausgaben auf dem Terminal macht, dann ist ein Cronjob die falsche Wahl. Du hast ja schon ein Autologin, dann kannst Du dem Benutzer entweder das Programm direkt als Login-Shell konfigurieren, oder es in einer Datei starten die von der Login-Shell beim Anmelden ausgewertet wird. Zum Beispiel in der `~/.bash_profile` falls Du die Bash verwendest.

Für so etwas würde ich dann aber einen eigenen Benutzer anlegen, damit man sich auch weiter noch als normaler Benutzer, zum Beispiel per SSH, anmelden kann.
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

BlackJack hat geschrieben:@Liffi: Die Mail geht natürlich nicht raus wenn da im Protokoll „No MTA installed“ steht und „discarding output“.
*hust* Einmal bis zum Ende lesen. Hast natürlich recht. Dann gibt es natürlich keine Mail.
RoterMilaniX
User
Beiträge: 5
Registriert: Mittwoch 12. Oktober 2016, 21:58

Hallo @ All,

zunächst mal vielen Dank für eure Antworten.

@BlackJack: Ich wollte generell die cronjob-Funktionalität prüfen, da sie anscheinend nicht funktioniert hatte. Deshalb auch das Test.py mit der simplen Bildschirm-Ausgabe "Ausführbar".

Ich habe bei "crontab -e"
einen cronjob angelegt: "@reboot /<Pfad>/Test.py >> /<Pfad>/cronlog.log 2>&1

Nach reboot und automatischen Einloggen wurde mir auf dem Bildschirm keine Ausgabe angezeigt. In der cronlog.log stand allerdings "Ausführbar". Das Script wurde also ausgeführt. Meine Frage wäre nun, wieso wird (Auch ohne Dateiumleitung) die Printausgabe "Ausführbar" nicht auf dem Bildschirm angezeigt?

Ich bin deiner Anregung gefolgt und habe ein Bash-Script erstellt, in dem ich mein Python-Programm ausführe:

Code: Alles auswählen

#!/bin/bash

#Klimalogging aktivieren
/home/pi/Werkstattklima/MessenSpeichernTest.py
exit 0
Dann noch in der Datei /etc/rc.local folghende Zeile vor exit 0 eingefügt
/bin/bash /<Pfad>/Autostart.sh

Funktioniert :-) Das Programm MessenSpeichernTest.py wird nach dem Starten des RPi ausgeführt.

Danke für die Hilfe

Gruß RM
BlackJack

@RoterMilaniX: Auf welchem Bildschirm und wie sollte der cron-Daemon da rankommen‽ Daemon impliziert ja schon ein Programm das im Hintergrund läuft und nicht mit einem Terminal verbunden ist.

Edit: Das Shell-Skript macht irgendwie keinen Sinn.
RoterMilaniX
User
Beiträge: 5
Registriert: Mittwoch 12. Oktober 2016, 21:58

@BlackJack, hört sich einleuchtend an.
Klar, ich hätte den Scriptaufruf auch direkt in der rc.local machen können, wollte aber die Bash-Sache mal ausprobieren (Mein erstes Bash-Script) :-)
Antworten