C Programm wird als cronjob unregelmäßig pausiert

cron und usleep()

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

C Programm wird als cronjob unregelmäßig pausiert
Hallo,

ich hab ein Programm in C geschrieben, das LEDs einschaltet, eine Weile wartet und die LEDs wieder ausschaltet. Das Ganze wird mehrmals hintereinander mit unterschiedlichen Wartezeiten zwischendrin ausgeführt.
Für das Warten ist mir nichts besseres als [m]usleep()[/m] eingefallen.
Trotzdem funktioniert das Programm auch zeitlich erstaunlich exakt wie gewünscht, wenn man es von der Kommandozeile startet.

Nun möchte einen Cronjob anlegen, der jeden Tag zu einer bestimmten Zeit das Programm ausführt.
Bei [m]crontab -e[/m] habe ich folgendes eingetragen.

00 20 * * * ~/projects/startLEDShow >~/log.txt 2>&1

Der regelmäßige Aufruf funktioniert wie gewünscht, im ausgegeben log.txt ist nichts ungewöhnliches zu finden.
Trotzdem scheint das Programm ab und zu (mehrfach pro Programmausführung und beim zweiten Ausführen an anderen Zeitpunkten) angehalten zu werden, um vielleicht eine Sekunde später fortgeführt zu werden. Der Warteabstand zum nächsten Umschalten der LEDs ist eindeutig wesentlich länger als er sein sollte, ob er daraufhin kürzer wird als er sein sollte ist schwer zu beurteilen. Die Werte, mit denen usleep aufgerufen wird, sind jedenfalls gleich.

Das Komische ist eben, dass das Programm wie gewünscht und mit den richtigen Abständen funktioniert, wenn man es von der Kommandozeile startet, jedoch gegelegentlich für einen Moment “angehalten” wird, wenn es als Cronjob ausgeführt wird.

Kann sich jemand eine Reim darauf machen?


Evtl. setzt deine Distribution einen Nice-Wert beim Ausführen von Cronjobs. Überprüf doch mal, ob der Nice-Wert des Jobs abweicht.


[quote=Ford Prefect:1383185528]Überprüf doch mal, ob der Nice-Wert des Jobs abweicht.
[/quote]
Tatsächlich, der nice Wert lag bei 10, der der meisten anderen Prozesse um die 0.
Mit negativem Nice Wert funktioniert das ganze wie gewünscht :slight_smile:

00 20 * * * sudo nice -n -20 ~/projects/startLEDShow >~/log.txt 2>&1

Besten Dank, Ford Perfect!


-20…


What’s wrong, Hasenichts? Laut wikipedia ist -20 die höchste Priorität, -42 ist also leider nicht drin^^


Hasenichts wollte wohl darauf hinaus, dass die höchste Priorität für eine LED womöglich nicht die beste Wahl ist. Vorallem da der Standardpriorität bei 0 liegt.