Seite 1 von 1

Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 16:57
von stsemant
Hallo.
Ich habe wieder mal ein Problem. IcH habe ein Programm in Python geschrieben, mit welchem ich mit dem Modul crontab.CronTab die crontab des jeweiligen Nutzers ändern kann. Klappt auch alles wunderbar, nur kann ich diese .py nicht als cronjob laufen lassen. DaS Programm wird dann nicht ausgeführt.
Kann mir bitte jemand erklären, warum das so ist? Wenn ich übrigens den Header

Code: Alles auswählen

frommen crontab Import CronTab 
und alles was dazugehört weglasse, wird es durch crontab ausgeführt. Kann also ein cronjob, der ein .py ausführt, welches eine crontab ändert, nicht ausgeführt werden? Mit rc.local kann ich das dann übrigens auch nicht ausführen.

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 17:31
von __deets__
Das was du da zeigst ist ja auch komplett falsch. Weder gibt es "frommen" noch gibt es "Import" mit grossem I. Insofern ist das nicht verwunderlich, dass der Python-Interpreter abbricht, wenn du ihm das vorsetzt. Mit crontab hat das aber erstmal nix zu tun.

Das es ein grundsaetzliches Problem geben sollte, eine crontab aus einem cronjob zu modifizieren kann ich mir fast nicht vorstellen. Unter Windows ja, aber unter Linux sollte das eigentlich nicht so sein. Allerdings ist ein selbst-modifizierender Cronjob eher ungewoehnlich, vielleicht erklaeuterst du uns, was du da eigentlich machst, und dann kann man da mehr zu sagen.

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 17:36
von stsemant
Ich habe den Beitrag hier mit dem smartphone verfasst . Das sind nur Tippfehler. Ich hab es natürlich richtig eingegeben.

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 18:02
von __deets__
Gut, aber das aendert an meiner Frage nichts: was tust du da genau? Kannst du mal dein Skript posten? So kann man da sonst nicht wirklich was zu sagen. Ausser: logging einbauen, und sicherstellen, das es funktioniert, und auch alle Fehler loggt. Damit du dir das Verhalten bei crontab start anschauen kannst.

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 20:01
von nezzcarth
__deets__ hat geschrieben: Das es ein grundsaetzliches Problem geben sollte, eine crontab aus einem cronjob zu modifizieren kann ich mir fast nicht vorstellen.
Im schlimmsten Fall ist das Verhalten in der Situation nicht spezifiziert (habe ich nicht nachgesehen) und abhängig von der jeweiligen Cron Implementierung. Dann kann es passiert, dass das Skript nach einem Update oder Distributionswechsel nicht mehr funktioniert.

--

Ich habe es jetzt mal mit 'cronie' ausprobiert und das klappt:

Code: Alles auswählen

$ cat /var/spool/cron/benutzer
*/2 19 * * * /home/benutzer/src/crontest/venv/bin/python /home/benutzer/src/crontest/cron_test.py # testjob

Code: Alles auswählen

#!/usr/bin/env python3
from random import randint
from copy import deepcopy
from pathlib import Path
from crontab import CronTab

def main():
    path = Path('/var/spool/cron')
    crontab = CronTab(tabfile=path/'benutzer')
    job = next(crontab.find_comment('testjob'))
    # scheint auch ohne deepcopy richtig zu gehen
    new_job = deepcopy(job)
    new_job.hour.on(randint(0, 24))
    job.delete()
    crontab.append(new_job)
    crontab.write()

if __name__ == '__main__':
    main() 
Wenn das Skript an sich funktioniert, würde ich daher eher tippen, dass es einer der üblichen Fehler im Zusammenhang mit Cronjobs ist (falscher Interpreter, nicht zugängliche libraries, fehlende Brechtigungen, …).

Ansonsten schließe ich mich __deets__ an, und frage mich, weshalb du das brauchst. Ist ja ganz lustig, aber wahrscheinlich gibt es eine bessere Lösung.

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 20:46
von stsemant
So, jetzt kann ich auch wieder antworten. Erstmal vielen Dank für die Antworten!
Also, ich habe folgendes vor. Ein Raspberry Pi allein in der Pampa nimmt Messwerte auf, speichert, verarbeitet und sendet mir diese per mail zu. Konfiguriert wird das ganze durch eine Textdatei. Die Messwertaufnahme erfolgt in einem python-Programm, das kann permanent erfolgen und mit vom Benutzer vorgegebenen Abständen (automatischer shutdown und boot sind auch realisiert). Das Gerät kann auch per email "gesteuert" werden . Das funktioniert soweit auch alles. Nun hab ich noch eine letzte Funktion , die ich einbauen möchte, und zwar die einer Status-email. Hier möchte ich aber mich nicht vorher festlegen müssen, wann ich die immer haben möchte, sondern möchte das möglichst variabel halten. Hierbei dachte ich mir, dass ich einen Befehl per mail sende. Das PRogramm das regelmäßig die emails abarbeitet, erkennt, dass auch ein neuer Eintrag für die crontab ist und trägt diese ein. Nun sind aber das Programm das die Messwerte aufnimmt, und dass Programm das die emails überprüft von der crontab aus gestartete Programme.

Eine Alternative wäre wahrscheinlich, dass ich das mit einem Event auf dem threading-Modul realisiere, oder?

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 20:58
von stsemant
Ja, hab denselben Code den ich auf dem PI habe auch eben mal auf meinem Ubuntu getestet, und hier funktioniert alles. Kann es also sein, dass das generell auf dem PI nicht funktioniert?

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 21:01
von noisefloor
Hallo,

für Befehle zur einmaligen Ausführung gibt es unter Linux den Befehl `at`.

Python hat auch das Modul `sched` an Bord, mit dem du zu eine bestimmten Zeit eine Python-Funktion ausführen kannst.

Gruß, noisefloor

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 21:10
von nezzcarth
@stsemant: Ob die Crontab-Datei das mit sich machen lässt, hat -- wenn überhaupt -- wahrscheinlich nichts mit dem RaspberryPi als Gerät zu tun, sondern mit dem verwendeten Betriebssystem und wie es eingerichtet ist (wo was wie mit welchen Berechtigungen installiert/zugänglich ist, etc.). Verwendest du Raspian? In welcher Version?

Re: Crontab.py nicht aus cron heraus

Verfasst: Freitag 9. Februar 2018, 21:17
von stsemant
Raspbian Jessie. Wie kann ich rausfinden woran es liegen könnte. Auch wenn ich vielleicht den weg mit sched gehen werde, wäre es ja gut, den Grund dafür zu kennen, warum was nichts funktioniert.

Re: Crontab.py nicht aus cron heraus

Verfasst: Samstag 10. Februar 2018, 13:52
von nezzcarth
Ich habe mein Testscript (s.o.) leicht angepasst auch mal auf Raspbian Jesse lite ausprobiert und das hat, wie vermutet, funktioniert. Insofern solltest du zum Debuggen noch mal die üblichen Dinge im Zusammenhang mit Cron-Jobs ausprobieren. Sind der Pfad zum Python-Interpreter und zum Skript absolut angegeben? Können alle Module gefunden und importiert werden? Stimmen die Berechtigungen an allen Stellen (insb. für Daten, die das Skript lädt)? Bist du sicher, dass das Skript nicht mit einer Fehlermeldung abbricht (z.B. mal Debug-Ausgaben mit Pipes wegspeichern, in eine Datei schreiben, oder von cron mailen lassen) ?

Re: Crontab.py nicht aus cron heraus

Verfasst: Samstag 10. Februar 2018, 17:13
von stsemant
Ich weiß auch nicht, woran es liegt. Ich hab es ja in allen möglichen Variationen ausprobiert. Hier auf meinem Laptop funktioniert mein Vorhaben ja auch. Egal, habe mich für das Modul schedule entschieden. Da lass ich dann im datenlogger-Programm einfach das run.pending() in der Schleife mitlaufen und fertig :)