ubuntuusers.de

cron / anacron funktioniert nicht wie ich es möchte

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

jochenv

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo Zusammen.

Bislang hatte ich hatte ich mit cron die auszuführenden Skripts gesteuert. Jedoch wurden diese nicht nachgeholt, wenn der Rechner aus war. Somit habe ich mir die wiki noch mal zur Hand genommen und wie beschrieben, die Änderungen vorgenommen. Jetzt habe ich Knoten drin.

Zunächst einmal die Einstellungen und die Skripts:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# /etc/crontab: system-wide crontab

#-----------------------------------------------------------------
# Mail fuer auftredende Fehler
MAILTO="im.original@echte.adresse"
# Shell variable for cron
SHELL=/bin/bash
# PATH variable for cron
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
#-----------------------------------------------------------------

#M   S     T M W        Befehl
#-----------------------------------------------------------------
 @reboot                /home/jochen/script/server-start.sh
45  15    * * *         /home/jochen/script/backup-server.sh
 0   6    * * *         reboot
 0   8    * * *         /home/jochen/script/backup-server.sh
10 6,9,12,15,18 * * *   /home/jochen/script/mailtest_sh

# --- emde ---

hier die Liste der Skripts

ochen@server06:~$ ll script
insgesamt 52
drwxrwxr-x  2 jochen jochen  4096 Feb 19 00:16 ./
drwxr-xr-x 11 jochen jochen  4096 Feb 17 14:53 ../
-rwxrwxr-x  1 jochen jochen   583 Feb 17 15:42 backup-server.sh*
-rwxrwxr-x  1 jochen jochen   184 Feb 19 00:15 mailtest_sh*
-rw-rw-r--  1 jochen jochen    42 Feb 19 16:17 mailtest.txt
-rwxrwxr-x  1 jochen jochen   198 Feb 17 15:24 server-start.sh*
-rw-rw-r--  1 jochen jochen    44 Feb 19 06:02 server-start.txt
jochen@server06:~$
1
2
3
4
5
jochen@server06:~$ cat script/server-start.sh
#!/bin/bash
echo Server gestartet $(date +"%A %Y-%m-%d %H:%M:%S") > /home/jochen/script/server-start.txt
mail -s "Server Cron Test" im.original@echte.adresse < /home/jochen/script/server-start.txt
jochen@server06:~$ 
1
2
3
4
5
jochen@server06:~$ cat script/mailtest_sh
#!/bin/bash
echo TEST TEST TEST  $(date +"%A %Y-%m-%d %H:%M:%S") > /home/jochen/script/mailtest.txt
mail -s "TEST Server" im.original@echte.adresse < /home/jochen/script/mailtest.txt
jochen@server06:~$ 

Soweit ist alles ok und funktioniert.

und hier nun der generierte Link für mailtest_sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
/etc/cron.hourly:
insgesamt 16
drwxr-xr-x   2 root root 4096 Feb 19 01:56 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rwxr-xr-x   1 root root  312 Feb 18 04:34 0anacron*
lrwxrwxrwx   1 root root   31 Feb 19 01:56 mailtest_sh -> /home/jochen/script/mailtest_sh*
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder

jochen@server06:~$ cat /etc/cron.hourly/mailtest_sh 
#!/bin/bash
echo TEST TEST TEST  $(date +"%A %Y-%m-%d %H:%M:%S") > /home/jochen/script/mailtest.txt
mail -s "TEST Server" im.original@echte.adresse < /home/jochen/script/mailtest.txt
jochen@server06:~$ 

und nun der anacrontab

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
jochen@server06:~$ cat /etc/anacrontab 
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
# SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
MAILTO="im.original@echte.adresse"
SHELL=/bin/bash

# These replace cron's entries
1	5	cron.daily	run-parts --report /etc/cron.daily
7	10	cron.weekly	run-parts --report /etc/cron.weekly
@monthly	15	cron.monthly	run-parts --report /etc/cron.monthly

1       10      cron.hourly     /etc/cron.hourly/mailtest_sh

jochen@server06:~$ 

So... was er nun korrekt macht ist: 08:02 und 15:47 Backup 06:02 Reboot 1 min. nach dem hochfahren bekomme ich eine Mail

was er nun nicht korrekt macht ist: senden der Testmail ... 06:10 06:17 07:17 08:17 09:10 09:17 10:17 11:17 12:10 12:17 13:17 usw.

warum die Skript mit plus 2 Minuten ausgeführt werden weiß ich nicht. die Mails xx:10 sind korrekt die Mails xx:17 sollen überhaupt nicht gesendet werden, da diese nur nachgeholt werden wenn der Rechner aus war.

Ich sehe den Fehler noch nicht.

Frage noch am Rand ... wo wird die Datei crontab abgelegt ? Wenn ich mit cat /etc/crontab mir die Darei anschaue steht dort was anderes drin, als wenn ich sudo crontab -e aufrufe.

Gruß Jochen

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5572

jochenv schrieb:

Frage noch am Rand ... wo wird die Datei crontab abgelegt ? Wenn ich mit cat /etc/crontab mir die Darei anschaue steht dort was anderes drin, als wenn ich sudo crontab -e aufrufe.

/etc/crontab und /etc/cron.* sind die Crontabs vom System, dort muss auch der user festgelegt werden. Mit crontab -e kommst du zur crontab des aktuellen Users (normalerweise wo in /var/spool/cron/...).

Siehe auch die manpage von crontab: crontab. Wobei im Falle von systemd eigentlich timer im Hintergrund die Aufgaben uebernehmen.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

hallo sebix,

/etc/crontab und /etc/cron.* sind die Crontabs vom System, dort muss auch der user festgelegt werden. Mit crontab -e kommst du zur crontab des aktuellen Users (normalerweise wo in /var/spool/cron/...).

Userbezogen: crontab -e habe ich gefunden /var/spool/cron/crontabs/jochen

die /etc/crontab ist noch Original, habe ich nicht verändert.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
jochen@server06:~$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
jochen@server06:~$

ich habe eben mit sudo crontab -e noch mal etwas geändert ... aber die Datei die ich geändert habe finde ich nicht !!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
jochen@server06:~$ sudo crontab -e
crontab: installing new crontab
jochen@server06:~$ ll /etc/cron.*
/etc/cron.d:
insgesamt 32
drwxr-xr-x   2 root root 4096 Feb  4 21:51 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rw-r--r--   1 root root  244 Dez 29  2014 anacron
-rw-r--r--   1 root root   68 Aug 30 18:18 checkshutdown
-rw-r--r--   1 root root  589 Jul 16  2014 mdadm
-rw-r--r--   1 root root  670 Mär  1  2016 php
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder
-rw-r--r--   1 root root  191 Aug 28 18:16 popularity-contest

/etc/cron.daily:
insgesamt 68
drwxr-xr-x   2 root root 4096 Feb  4 21:06 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rwxr-xr-x   1 root root  311 Dez 29  2014 0anacron*
-rwxr-xr-x   1 root root  539 Apr  5  2016 apache2*
-rwxr-xr-x   1 root root  376 Mär 31  2016 apport*
-rwxr-xr-x   1 root root 1474 Jun 19  2017 apt-compat*
-rwxr-xr-x   1 root root  355 Mai 22  2012 bsdmainutils*
-rwxr-xr-x   1 root root 1597 Nov 27  2015 dpkg*
-rwxr-xr-x   1 root root  372 Mai  6  2015 logrotate*
-rwxr-xr-x   1 root root 1293 Nov  6  2015 man-db*
-rwxr-xr-x   1 root root  539 Jul 16  2014 mdadm*
-rwxr-xr-x   1 root root  435 Nov 18  2014 mlocate*
-rwxr-xr-x   1 root root  249 Nov 12  2015 passwd*
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder
-rwxr-xr-x   1 root root 3449 Feb 26  2016 popularity-contest*
-rwxr-xr-x   1 root root  383 Mär  8  2016 samba*
-rwxr-xr-x   1 root root  214 Mai 24  2016 update-notifier-common*

/etc/cron.hourly:
insgesamt 16
drwxr-xr-x   2 root root 4096 Feb 19 01:56 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rwxr-xr-x   1 root root  312 Feb 18 04:34 0anacron*
lrwxrwxrwx   1 root root   31 Feb 19 01:56 mailtest_sh -> /home/jochen/script/mailtest_sh*
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder

/etc/cron.monthly:
insgesamt 16
drwxr-xr-x   2 root root 4096 Sep  1 01:27 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rwxr-xr-x   1 root root  313 Dez 29  2014 0anacron*
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder

/etc/cron.weekly:
insgesamt 28
drwxr-xr-x   2 root root 4096 Jan 26 06:06 ./
drwxr-xr-x 100 root root 4096 Feb 19 02:04 ../
-rwxr-xr-x   1 root root  312 Dez 29  2014 0anacron*
-rwxr-xr-x   1 root root   86 Apr 13  2016 fstrim*
-rwxr-xr-x   1 root root  771 Nov  6  2015 man-db*
-rw-r--r--   1 root root  102 Apr  5  2016 .placeholder
-rwxr-xr-x   1 root root  211 Mai 24  2016 update-notifier-common*
jochen@server06:~$ ls -la --sort=time /etc/
insgesamt 948
drwxr-xr-x   3 root root    4096 Feb 19 02:25 samba
drwxr-xr-x 100 root root    4096 Feb 19 02:04 .
-rw-r--r--   1 root root     518 Feb 19 02:04 anacrontab
drwxr-xr-x   2 root root    4096 Feb 19 01:56 cron.hourly
-rw-r--r--   1 root root   33682 Feb 18 00:35 ld.so.cache
drwxr-xr-x   2 root root    4096 Feb 18 00:35 rcS.d
drwxr-xr-x   2 root root    4096 Feb 18 00:35 init.d
drwxr-xr-x   2 root root    4096 Feb 18 00:35 alternatives
drwxr-xr-x   2 root root    4096 Feb 18 00:35 ld.so.conf.d
drwxr-xr-x   2 root root    4096 Feb 18 00:35 sensors.d
drwxr-xr-x   4 root root    4096 Feb 18 00:35 fonts
drwxr-xr-x   8 root root    4096 Feb 18 00:35 X11
drwxr-xr-x   5 root root    4096 Feb 12 02:53 nginx
drwxr-xr-x   2 root root    4096 Feb 12 02:47 init
....

Siehe auch die manpage von crontab: crontab. Wobei im Falle von systemd eigentlich timer im Hintergrund die Aufgaben uebernehmen.

habe ich mir gerade noch mal auf gemacht und schaue dort noch mal.

Gruß Jochen

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

jochenv schrieb:

ich habe eben mit sudo crontab -e noch mal etwas geändert ... aber die Datei die ich geändert habe finde ich nicht !!

Mit sudo wirst du root, also muss die Datei /var/spool/cron/root sein.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo misterunknown

Mit sudo wirst du root, also muss die Datei /var/spool/cron/root sein.

jochen@server06:~$ sudo ls -la /var/spool/cron/crontabs/root
-rw------- 1 root crontab 2529 Feb 19 19:33 /var/spool/cron/crontabs/root
jochen@server06:~$

ok, manches mal muss man mit der Nase drauf gestupst werden.

Offen ist aber immer noch das eigentliche Problem.

Gruß Jochen

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

jochenv schrieb:

Offen ist aber immer noch das eigentliche Problem.

Das hatte ich noch nicht genau verstanden, dehalb nochmal die Frage:

  • Wie oft soll das Skript ausgeführt werden?

  • Willst du es in einer Crontab eintragen oder von anacron via cron.[daily,hourly,...] ausführen lassen?

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo misterunknown

Das hatte ich noch nicht genau verstanden, dehalb nochmal die Frage:

  • Wie oft soll das Skript ausgeführt werden?

  • Willst du es in einer Crontab eintragen oder von anacron via cron.[daily,hourly,...] ausführen lassen?

10 6,9,12,15,18 * * *   /home/jochen/script/mailtest_sh

Soll : 06:10 und 9:10 und 12:10 und 15:10 und 18:10

wenn der Rechner um von 8:00 bis 10:30 Uhr aus ist, sprich um 10:30 wird der Rechner gestartet, dann 10 Minuten später, also 10:40 soll dann der Job nachgeholt werden.

Gruß Jochen

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Dann würde ich einfach zwei Einträge machen:

10 6,9,12,15,18 * * *     /home/jochen/script/mailtest_sh
@reboot                   sleep 600; /home/jochen/script/mailtest_sh

Dann führt er das Skript zu deinen favorisierten Zeitpunkten aus, und immer 10 Minuten nach einen Bootvorgang. Das ist IMHO das einfachste.

jochenv

(Themenstarter)

Anmeldungsdatum:
23. April 2016

Beiträge: 670

Wohnort: Kurhessen

Hallo misterunknown

Dann würde ich einfach zwei Einträge machen:

10 6,9,12,15,18 * * *     /home/jochen/script/mailtest_sh
@reboot                   sleep 600; /home/jochen/script/mailtest_sh

Dann führt er das Skript zu deinen favorisierten Zeitpunkten aus, und immer 10 Minuten nach einen Bootvorgang. Das ist IMHO das einfachste.

Ok, würde aber heißen ... Rechnerstart um 6:05, dann normales ausführen des Job um 6:10 (das macht er auch schon) und dann noch mal 6:15 und den soll er er dann nicht. Will den Job hat er ja auch schon vor 5 min ausgeführt.

wäre in dem Fall nicht so tragisch. Nur soll das mit anacorn nicht automatisch geschehen ?

Übrigens der Job wird jede Stunde ausgeführt und nicht alle 3 Stunde, wie eingetragen.

Und wie soll ich dass dann eintragen mit den Backup-Job ? der soll zweimal die Woche laufen. Bzw. wenn der Rechner aus war, dann nachholen! aber nicht gleich nach dem Booten, sondern auch 10 später.

Das Eintragen mit cron -e bzw. sudo corn -e klappt hier zu 99%, dass mit anacron gar nicht. Wiki und man helfen mir da auch nicht.

Gruß Jochen

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

jochenv schrieb:

Ok, würde aber heißen ... Rechnerstart um 6:05, dann normales ausführen des Job um 6:10 (das macht er auch schon) und dann noch mal 6:15 und den soll er er dann nicht. Will den Job hat er ja auch schon vor 5 min ausgeführt.

Ja, das wäre dann so der Stand.

wäre in dem Fall nicht so tragisch. Nur soll das mit anacorn nicht automatisch geschehen ?

Anacron ist für die Verzeichnisse /etc/cron.{daily,hourly,...} zuständig. Nicht verwechseln!

Übrigens der Job wird jede Stunde ausgeführt und nicht alle 3 Stunde, wie eingetragen.

Dann hast du vermutlich noch einen Symlink im Verzeichnis /etc/cron.hourly oder etwas ähnliches.

Und wie soll ich dass dann eintragen mit den Backup-Job ? der soll zweimal die Woche laufen. Bzw. wenn der Rechner aus war, dann nachholen! aber nicht gleich nach dem Booten, sondern auch 10 später.

Hast du dir das hier mal durchgelesen? Du kannst beispielsweise einen Anacron-Eintrag schreiben, der alle 3 Tage ausgeführt wird, aber mindestens 15 Minuten nach dem Boot:

/etc/anacron:
  3    15    mybackup    /home/jochen/script/mailtest_sh

Das Eintragen mit cron -e bzw. sudo corn -e klappt hier zu 99%, dass mit anacron gar nicht.

Der Befehl heißt crontab. "Klappt nicht" ist keine Fehlerbeschreibung.

Wiki und man helfen mir da auch nicht.

Hast du denn beides durchgelesen und verstanden? Wenn nicht, hilfts natürlich nichts.

Antworten |