Forum: Mikrocontroller und Digitale Elektronik Raspi cronjobs und crontab


von Detlef _. (detlef_a)


Lesenswert?

Hi,

bißchen fehlplatziert hier, vllt. . Ich betreibe einen RaspberryPi und 
benutze cronjobs die durch die crontab gesteuert werden um periodisch 
Dinge zu erledigen. Der Raspi kommt aber eine Stunde zu spät. 'date' 
zeigt die richtige Zeit und 'CEST'. Ich denke die cronjobs benutzen 
'date'?

Wo muss ich denn da schrauben?

THX
Cheers
Detlef

von Harry L. (mysth)


Lesenswert?

1
sudo apt install tzdata

Anschliessend:
1
sudo dpkg-reconfigure tzdata

von Stefan F. (Gast)


Lesenswert?

Detlef _. schrieb:
> Ich denke die cronjobs benutzen 'date'?

Ja, aber deine Konsole ist vielleicht gar nicht auf die lokale Zeitzone 
"Berlin" eingestellt. Die beiden Befehle, die Harry genannt hat, müssten 
das korrigieren.

Danach musst du eventuell die Uhrzeit korrigieren.

von Segg (Gast)


Lesenswert?

@ Det

Einfach "sudo raspi-config" in der Konsole aufrufen und die Zeitzone 
einstellen.

Der Punkt nennt sich: Localisation Options

von Detlef _. (detlef_a)


Lesenswert?

Hi,

Reaktion auf
>>sudo apt install tzdata
war 'tzdata is already the newest version'

Dann
sudo dpkg-reconfigure tzdata
war 'Europe/Berlin'

Local time/ UTC, beides richtig

Die crontab ist eingestellt auf 9:43, gestartet wird um 10:43. Soweit 
ich weiß werden die cronjobs als 'root' ausgeführt, 'sudo date' gibt 
aber auch die richtige Zeit.

Weiß jemend den Reim?

THX
Cheers
Detlef

von Harry L. (mysth)


Lesenswert?

Was sagt die Ausgabe von
1
sudo echo $TZ

Da sollte gar nichts passieren.
Du kannst Cronjobs auch als User laufen lassen.
Dazu als User einfach:
1
crontab -e
Ohne Sudo!!!

Wird dann auch UTC verwendet, oder nur bei root?

: Bearbeitet durch User
von Detlef _. (detlef_a)


Lesenswert?

Hi,

Harry L. schrieb:
> Was sagt die Ausgabe von
>
1
> sudo echo $TZ
2
>
> Da sollte gar nichts passieren.

bei 'echo $TZ' und 'sudo echo $TZ' kommt jeweils ne Leerzeile

> Du kannst Cronjobs auch als User laufen lassen.
> Dazu als User einfach:
>
1
> crontab -e
2
>
> Ohne Sudo!!!

Ich hatte 'crontab -e' gemacht, nicht 'sudo crontab -e'. Bei 'sudo 
crontab -e' geht ne neue, leere crontab auf. Ich hatte verstanden, dass 
cronjobs als root laufen selbst wenn man als user ne crontab aufsetzt 
??!!! Ich hab nochmal ne crontab für root aufgesetzt, mal schauen ob die 
auch zu spät dran ist.

> Wird dann auch UTC verwendet, oder nur bei root?
Es wird nicht UTC verwendet. Ich habe 1h Versatz, UTC liegt 2h weg.

THX
Cheers
Detlef

von Stefan F. (Gast)


Lesenswert?

Detlef _. schrieb:
> Ich hatte verstanden, dass cronjobs als root laufen
> selbst wenn man als user ne crontab aufsetzt

Hoffentlich nicht, das wäre eine kolossale Sicherheitslücke.

von Thomas W. (Gast)


Lesenswert?

Moin, -

zeige mal die crontab-Zeile!

Gruesse

Th.

von Thomas W. (Gast)


Lesenswert?

Moin, -

> Ich hatte verstanden, dass
> cronjobs als root laufen selbst wenn man als user ne crontab aufsetzt

Nein. Der Start der Daemons braucht root-Rechte, die Kommandos werden 
(in einer art login-shell) fuer den Benutzer ausgefuehrt.

Gruesse

Th.

P.S.: Gehe davon aus, dass Du das Problem bist. Es gibt genug Nutzer, 
die Cron benutzen. Zeige die Crontab-Zeile!

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hier die crontab. Die funzt schon, aber eben eine Stunde zu spät.

>>>>>>
P.S.: Gehe davon aus, dass Du das Problem bist. Es gibt genug Nutzer,
die Cron benutzen. Zeige die Crontab-Zeile!

Ja, ich bin immer das Problem, danke nochmal für den Hinweis. Und dass 
ich cron nicht verstehe ist eines der kleinsten von mir verursachten 
Probleme.

THX
Cheers
Detlef

: Bearbeitet durch User
von Thomas W. (Gast)


Lesenswert?

Moin, -

das war nicht boese gemeint. Aber viele Benutzer benutzen Cron.

Der Benutzername des Kommandos fehlt! Der muss auch beim 
Benutzerspezifischen Crontab besetzt werden, z.B. (von aktuellen 
Raspian):
1
# Example of job definition:
2
# .---------------- minute (0 - 59)
3
# |  .------------- hour (0 - 23)
4
# |  |  .---------- day of month (1 - 31)
5
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
6
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
7
# |  |  |  |  |
8
# *  *  *  *  * user-name command to be executed
9
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
10
25 6    * * *   root    test -x /usr/sbin/anacron ||

Spendier den Benutzernamen und vermutlich wird alles funktionieren.

Gruesse

Th.

Hier Edit:

P.S.: Es kann sein, dass meine Ausfuehrungen nicht ganz richtig sind 
(ich habe immer versucht, nur eine system-weite crontab zu haben [wg. 
Uebersicht])

Und es scheint auch Unterschiede zwischen Debian und Raspbian zu geben. 
Bah!



> Ja, ich bin immer das Problem, danke nochmal für den Hinweis. Und dass
> ich cron nicht verstehe ist eines der kleinsten von mir verursachten
> Probleme.
>
> THX
> Cheers
> Detlef

von (prx) A. K. (prx)


Lesenswert?

raspi-config?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Thomas W. schrieb:
> Der Benutzername des Kommandos fehlt!

Den gibt es nur im "System Cron File" (/etc/crontab), im normalen "Cron 
File" nicht. Dein Argument zieht auch nicht für den 1h-Zeitversatz.

Aufrufen und Lesen:
1
man 5 crontab

: Bearbeitet durch Moderator
von Pete K. (pete77)


Lesenswert?

Woran erkennst Du denn, dass die jobs zu spät gestartet werden?

Erstelle mal ein crontab-Eintrag, in dem Du stündlich die Zeit in eine 
Datei schreibst: date>zeit.txt
Anhand des Zeitstempels der Datei kann man schauen, wann die erzeugt 
wurde.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Mal ein paar Zwischenfragen:
- hat der RPi eine RTC?
- wenn ja, was sagt:
date; cat /proc/driver/rtc*
- wie oft bootet der RPi neu?
- benutzt du irgendwas in der Art hibernate, suspend-to- oder...?
- (wie) bekommst du die Zeit aus dem Internet?
- evt., wenn's nicht zu lang wird:
sudo egrep -i 'cron|ntp' /var/log/syslog | colrm 78

danke!

von Thomas W. (Gast)


Lesenswert?

Moin, -

Pete K. schrieb:
> Woran erkennst Du denn, dass die jobs zu spät gestartet werden?
>
> Erstelle mal ein crontab-Eintrag, in dem Du stündlich die Zeit in eine
1
# For more information see the manual pages of crontab(5) and cron(8)
2
#
3
SHELL=/bin/bash
4
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin
5
6
# m h  dom mon dow   command
7
* * *  *   *         /usr/bin/date >> /tmp/cron.test

schreibt jede Minute einen Zeitstempel. Dann weiss man zumindest, wie 
spaet es auf dem Raspberry ist.

Gruesse

Th.

von Sebastian W. (wangnick)


Lesenswert?

Auf meinem RPI funktioniert cron. Meine Konfiguration:
1
pi@database:~ $ date
2
Wed Jun  2 13:49:28 CEST 2021
3
pi@database:~ $ date -u
4
Wed Jun  2 11:49:33 UTC 2021
5
pi@database:~ $ echo $TZ
6
7
pi@database:~ $ sudo bash
8
root@database:/home/pi# date
9
Wed Jun  2 13:49:47 CEST 2021
10
root@database:/home/pi# date -u
11
Wed Jun  2 11:49:50 UTC 2021
12
root@database:/home/pi# echo $TZ
13
14
root@database:/home/pi# exit
15
pi@database:~ $ ls -l /etc/localtime
16
lrwxrwxrwx 1 root root 33 Mar 22 17:39 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

Wie sieht deine Konfiguration aus?

LG, Sebastian

von Detlef _. (detlef_a)


Lesenswert?

Danke für das Interesse.

>>>>>
Woran merke ich, dass die Task eine Stunde zu spät läuft? Ich möchte 
einen stream Mitschnitt um 8:43 machen, der Mitschnitt ist von 9:43.

>>>>>>
Die Zeile in der crontab

  *              date >> cron.test

liefert die richtige Zeit Wed  2 Jun 14:26:01 CEST 2021

>>>>>>>>>>>>>
date -u liefert
Wed  2 Jun 12:31:47 UTC 2021

>>>>
sudo date und sudo date -u , alles richtig
echo $TZ liefert die Leerzeile

>>>
pi@raspberrypi:~ $ ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Jun  1 22:31 /etc/localtime -> 
/usr/share/zoneinfo/Europe/Berlin

>>>>> cat /proc/driver/rtc*
cat: '/proc/driver/rtc*': No such file or directory

>>>>>
- wie oft bootet der RPi neu?
- benutzt du irgendwas in der Art hibernate, suspend-to- oder...?

Nie. Nein.

>>>>>
- hat der RPi eine RTC?
Nein, Uralt Raspi

>>>>>
- (wie) bekommst du die Zeit aus dem Internet?
Keine Ahnung. Ich weiß nicht ob ntp läuft. Aber die Zeit ist ja korrekt.

>>>>>>>
- evt., wenn's nicht zu lang wird:
sudo egrep -i 'cron|ntp' /var/log/syslog | colrm 78

wird zu lang


Die eine Stunde Versatz sprechen dafür dass das was mit der Sommerzeit 
zum tun hat ?!

THX
Cheers
Detlef

von Thomas W. (Gast)


Lesenswert?

Moin, -

vielen Dank. Langsam wird das nicht zu verstehen.  Was fuer ein Linux 
hast Du bei dem RaspPi?

bitte mal die kommandos ausfuehren:
1
cat /etc/debian_version
2
uname -a

Das zeigt Dir die Betriebssystem und Kernel-Version an. Sollte so etwas 
ausgeben:
1
pi@raspberry3:~ $ cat /etc/debian_version
2
10.9
3
pi@raspberry3:~ $ uname -a
4
Linux raspberry3 5.10.17-v7+ #1403 SMP Mon Feb 22 11:29:51 GMT 2021 armv7l GNU/Linux

Gruesse

Th.

von Thomas W. (Gast)


Lesenswert?

Und zeige mit bitte mal den Inhalt von
1
/home/pi/rippen/Zeitzeichen.sh

Gruesse

Th.

von (prx) A. K. (prx)


Lesenswert?

Detlef _. schrieb:
> Woran merke ich, dass die Task eine Stunde zu spät läuft? Ich möchte
> einen stream Mitschnitt um 8:43 machen, der Mitschnitt ist von 9:43.

Lokal auf einem Medium direkt am Raspi angeschlossen gespeichert, oder 
über Netz irgendwo anders?

: Bearbeitet durch User
von Detlef _. (detlef_a)


Lesenswert?

Hi,

>>>>>>>>>
pi@raspberrypi:~/rippen $ cat Zeitzeichen.sh
#! /bin/bash
#
fn=`date +%a_%d_%m_%G_%H_%M_zeitzeichen`
streamripper http://www.wdr.de/wdrlive/media/wdr5.m3u -l 1220 -a 
wdr5_$fn -s > /dev/null 2>&1
#pwd >> dlf_$fn.txt
lftp -c "set ssl:verify-certificate no; open -u zeitzeichen,zeitzeichen 
192.168.178.1; put wdr5_$fn.mp3;"
rm -f *.mp3
rm -f ./incomplete/*.mp3
rm -f *.cue
exit 0

Das file pumpe ich über ftp auf mein NAS.

>>>>>>>>>>>>>
bitte mal die kommandos ausfuehren:
pi@raspberrypi:~/rippen $ cat /etc/debian_version
10.1
pi@raspberrypi:~/rippen $ uname -a
Linux raspberrypi 4.19.75+ #1270 Tue Sep 24 18:38:54 BST 2019 armv6l 
GNU/Linux

THX
Cheers
Detlef

von Sascha W. (sascha-w)


Lesenswert?

Stimmt der von dir erzeugte Zeitstempel im Dateinamen mit dem 
Zeitstempel in den Dateieigenschaften überein?
Ich gehe davon aus das du am Inhalt der Datei verifiziert hast das die 
falsche Stunde aufgezeichnet wurde.

Sascha

von Bauform B. (bauformb)


Lesenswert?

Detlef _. schrieb:
>> - wie oft bootet der RPi neu?
> Nie.

Dann ist es denkbar, dass die Zeitzone nachträglich geändert wurde. Der 
cron daemon läuft aber noch mit der ursprünglichen Zeitzone. Solches 
Verhalten ist völlig normal, Programme lesen die /etc/timezone und 
/etc/localtime nur einmal kurz nach dem Start.

Das stört seltenst, weil niemand freiwillig die Zeitzone ändert. Bei 
einem Server auf einem Schiff könnte man in Versuchung kommen, aber 
sonst? Allerdings würde ich normal einen Versatz von 2 Stunden erwarten, 
aber was ist schon normal. Mit mehrfachen Änderungen schafft man sicher 
auch 1 Stunde.

von Thomas W. (Gast)


Lesenswert?

Detlef _. schrieb:

der RaspiPi ist zwar zwei Jahre abgelagert, das macht aber nichts (war 
auch mehr verzweifelung).

Der streamripper ist ja auch nichts wesentliches (das vielleicht 3600s 
gewartet wurden).

Ich habe keinen Tip mehr. Was Du gezeigt eine ganz normale 
Raspbian-Installation, ein solchen Problem habe ich bei cron nie gehabt 
(cron guckt anfang einer jeden Minute ob ein job zu starten ist. Cron 
laeuft in lokal-time, d.h. sommer/Winter-Zeit gekommt er mit). Deine 
Zeitzone ist OK.

Ich muss gestehen: Meine Vermutung dass das Problem vor dem Schirm 
sitzt, war falsch. Entschuldigung.

Gruesse

Th.

von Detlef _. (detlef_a)


Lesenswert?

Bauform B. schrieb:
> Detlef _. schrieb:
>>> - wie oft bootet der RPi neu?
>> Nie.
>
> Dann ist es denkbar, dass die Zeitzone nachträglich geändert wurde. Der
> cron daemon läuft aber noch mit der ursprünglichen Zeitzone. Solches


Das ist des Rätsels Lösung. Ich hatte die TZ geändert, das hatte der 
crond nicht mitbekommen. Neu gebootet, Test-crontab aufgesetzt, geht.

Wieder was gelernt, Vorsicht mit den Dämonen bei Änderung 
Systemsettings, die kucken nur beim Start.

Vielen Dank allen Beteiligten.

Cheers
Detlef

von Bauform B. (bauformb)


Lesenswert?

Detlef _. schrieb:
> Neu gebootet, Test-crontab aufgesetzt, geht.

Normalerweise würde man nur den cron neu starten. Andererseits ist 
grundsätzlich jeder daemon betroffen. Und dann wieder nur diejenigen, 
die die lokale Zeit brauchen. Ein httpd z.B. muss die korrekte Zeit 
kennen, aber er benutzt nur GMT. Weil, naja, man will ja auch eine 
rekordverdächtige uptime zusammenbekommen ;)

Edit: danke für die Rückmeldung!

: Bearbeitet durch User
von Thomas W. (Gast)


Lesenswert?

Detlef _. schrieb:
> Bauform B. schrieb:

>> Dann ist es denkbar, dass die Zeitzone nachträglich geändert wurde. Der
>> cron daemon läuft aber noch mit der ursprünglichen Zeitzone. Solches
>
>
> Das ist des Rätsels Lösung. Ich hatte die TZ geändert, das hatte der
> crond nicht mitbekommen. Neu gebootet, Test-crontab aufgesetzt, geht.

Haette ich auch nicht gedacht, weil (glaube ich) mein Server zwei 
Zeitzonenwechsel pro Jahr macht (und nur einmal im Jahr gestartet wird).

There is always something to learn.

Th.

von Bauform B. (bauformb)


Lesenswert?

Thomas W. schrieb:
> Haette ich auch nicht gedacht, weil (glaube ich) mein Server zwei
> Zeitzonenwechsel pro Jahr macht (und nur einmal im Jahr gestartet wird).

Die Umstellung Sommer/Normalzeit hat damit nichts zu tun, die 
funktioniert auch ohne Neustart.

Wenn du echte Zeitzonenwechsel machst: auf einem Schiff? 
Kontinentalplattenverschiebung? Ein tragbarer Server darf mit in den 
Urlaub?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.