Cronjobs

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Cronjobs

Beitrag von snoop_hallo » 14.10.2005 15:13:48

Ich habe ein Problem zu den Cronjobs.
Habe eine Cronjob mit crontab -e installiert.

Code: Alles auswählen

2 * * * * /home/test/test.sh
Das Skript test.sh soll jede zwei Minuten ausgeführt werden, allerdings tut sich nichts.
Manuell ist es möglich das Skript auszuführen.

Bei den Cronjob bekomm ich nur die Meldung, dass er erfogreich installiert wurde, sonst keine weiter Nachricht, dass vielleicht irgendetwas fehlgeschlagen ist.

Kann mir vielleicht jemand weiterhelfen?

Benutzeravatar
QT
Beiträge: 1392
Registriert: 22.07.2004 21:08:02
Wohnort: localhost

Beitrag von QT » 14.10.2005 15:16:16

Hi,

wenn Du ein Script jede zweite Minute laufen lassen moechtest, dann muss der Eintrag etwas anders aussehen:

Code: Alles auswählen

*/2 * * * * /home/test/test.sh
In crontab(5) gibts auch jede Menge Beispiele zu unterschiedlichen Szenarien. Sicherlich ne lesenswerte Sache fuer Dich, wenn Du an dem Thema dran bist.

Dein Job wuerde nur jede Stunde um 2 Minuten nach der vollen Stunde laufen.

HTH,
QT

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 14.10.2005 15:53:13

Oh ja da hab ich mich vertan, aber das stellt ja nicht das Problem da.
Das Problem ist, dass dir Jobs gar nicht ausgeführt werden.

Benutzeravatar
Snoopy
Beiträge: 4297
Registriert: 17.11.2003 18:26:56
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rh.- Pflz.

Beitrag von Snoopy » 14.10.2005 16:56:11

Hi

- Hast Du in der jeweiligen Crontab eine Leerzeile am Ende eingefügt ?
- Hat die Crontab bzw der User die Berechtigungen dazu das Skript auszuführen ?
- Hast Du die Befehle mit den absoluten Pfaden angegeben ?
- Oder ist das komplette Environment des Users bekannt gemacht worden, in dem Skript ?

Bedenke:
Ein Cronjob ist nicht dasselbe, als wenn Du es auf der Shell ausführst !
Dem Cron fehlt Deine Umgebungsvariablen...

Bsp:
Wenn Du auf der Shell ein ls -la machst, weiss Deine Shell durch die Variablen, dass sie den /bin/ls -la ausführen soll.
Der Cron weiss das nicht, da rufst Du entweder gleich /bin/ls -la auf, oder gibst ihm Deine Umgebung.

Clio

Beitrag von Clio » 14.10.2005 18:30:54

Hi,

eine schöne graphische Hilfe ist auch Kcron.

Benutzeravatar
QT
Beiträge: 1392
Registriert: 22.07.2004 21:08:02
Wohnort: localhost

Beitrag von QT » 14.10.2005 20:02:56

snoop_hallo hat geschrieben:Oh ja da hab ich mich vertan, aber das stellt ja nicht das Problem da.
Das Problem ist, dass dir Jobs gar nicht ausgeführt werden.
Oh, sorry, das hatte ich dann falsch verstanden :D

Poste doch mal den Inhalt von test.sh nach http://nopaste.debianforum.de

Wie andere schon schrieben, steht in einer von cron geöffneten Shell lediglich ein stark rudimentäres Environment zur Verfügung und vieles, was man sonst per $VAR nutzen kann, geht dann nicht. Also nochmal drüberschauen und im Zweifel Binaries mit vollem Pfad angeben und Variablen im Script explizit exportieren.

HTH,
QT

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 10:35:22

Das Skipt ist eigentlich egal. Allein das Anlegen von Ordnern etc. geht nicht. z.B.

Code: Alles auswählen

0 10 * * * mkdir /root/test
Allerdings kommen auch keine Fehlermeldungen.
Ich bin als root angemeldet und versuche einfach in /root einen neuen Ordner um 10Uhr zu erstellen. Aber ohne Erfolg.

Benutzeravatar
Snoopy
Beiträge: 4297
Registriert: 17.11.2003 18:26:56
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rh.- Pflz.

Beitrag von Snoopy » 26.10.2005 10:45:00

Hi

Na dann probier mal das hier

Code: Alles auswählen

0 10 * * * /bin/mkdir /root/test
Meiner meinung nach, finde ich es etwas unsauber Befehle direkt in die Crontab zu schreiben.
Ich tendiere eher dazu, ein sauberes Skript zu erstellen und dieses dann aufzurufen.

Das ist sicherlich geschmacksache, eben nur meine Meinung.

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 10:53:58

Ja ich weiß, allerdings habe ich den Cronjob auch einmal so ausgeführt. Allerdings auch ohne Erfolg

Benutzeravatar
Snoopy
Beiträge: 4297
Registriert: 17.11.2003 18:26:56
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rh.- Pflz.

Beitrag von Snoopy » 26.10.2005 11:02:56

snoop_hallo hat geschrieben:Ja ich weiß, allerdings habe ich den Cronjob auch einmal so ausgeführt. Allerdings auch ohne Erfolg
???
Wenn Du ein

Code: Alles auswählen

/bin/mkdir /root/test
ausführst, passiert nichts ?

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 11:12:48

Ganz genau und das wundert mich sehr, weil auch keine Fehler kommen.

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von mistersixt » 26.10.2005 12:55:27

Loift denn überhaupt der cron Prozess ?

Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 13:16:37

Ja der Prozess läuft.
Sonst würd das alles ja keinen Sinn machen ;)

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 26.10.2005 13:52:57

Code: Alles auswählen

lsof |fgrep cron
crontab -l
bitte mal ausgeben

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 26.10.2005 14:00:57

Nachtrag:

Die Ausgabe von lsof |fgrep cron sollte folgende Zeile

Code: Alles auswählen

cron       3453       root  txt       REG        3,3   31416     587535 /usr/sbin/cron
ergeben, wobei 3453 eine andere Zahl ist. Nun mal an den Prozess dranhängen mit:

Code: Alles auswählen

strace -p3453    (Zahl anpassen, kein Leerzeichen )
... und etwas warten

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 16:31:28

Und was soll dieser strace im endefeckt bewirken?

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 26.10.2005 16:52:41

Zeigt dir alle Systemcalls an, die der Cron ausfuehrt. Damit kann man Fehlersuche betreiben, wenn man sich entsprechend auskennt.

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 26.10.2005 18:18:05

Ich befürchte immer noch, dass cron gar nicht (richtig) läuft. strace würde alle paar Sekunden zumindestens mitteilen, dass der Prozess überhaupt noch auf etwas wartet.

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 26.10.2005 21:38:22

Hier ist ein Ausschnitt von strace.

Code: Alles auswählen

stat64("crontabs", {st_mode=S_IFDIR|S_ISVTX|0730, st_size=4096, ...}) = 0
stat64("/etc/crontab", {st_mode=S_IFREG|0644, st_size=651, ...}) = 0
stat64("/etc/cron.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("/etc/cron.d/exim", {st_mode=S_IFREG|0644, st_size=456, ...}) = 0
lstat64("/etc/crontab", {st_mode=S_IFREG|0644, st_size=651, ...}) = 0
open("/etc/crontab", O_RDONLY)          = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=651, ...}) = 0
close(4)                                = 0
open("/etc/cron.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
getdents64(4, /* 6 entries */, 4096)    = 160
lstat64("/etc/cron.d/exim", {st_mode=S_IFREG|0644, st_size=456, ...}) = 0
open("/etc/cron.d/exim", O_RDONLY)      = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=456, ...}) = 0
close(5)                                = 0

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 27.10.2005 08:42:39

Hi,
wichtig ist der Ausschnitt zu der Minute.

Mein Test mit crontab -e folgendes in /var/spool/cron/crontabs/root

Code: Alles auswählen

*/1 * * * * touch /root/testfile
eingetragen. Zur vollen Minute steht dann im strace:

Code: Alles auswählen

open("crontabs/root", O_RDONLY|O_NOFOLLOW) = 5
und die Aktion wird ausgeführt. Bitte mal /var/spool/cron/crontabs/root nachschauen, ob das da auch steht. Alternativ die Zeile vielleicht in /etc/crontab eintragen.

snoop_hallo
Beiträge: 110
Registriert: 29.03.2005 19:24:45
Kontaktdaten:

Beitrag von snoop_hallo » 27.10.2005 20:55:00

Der Eintrag

Code: Alles auswählen

*/1 * * * * touch /root/testfile 
ist in

Code: Alles auswählen

/var/spool/cron/crontabs/root 
vorhanden. Allerdings bekomm ich mit strace nur einen ähnliche Eintrag wie z.B.

Code: Alles auswählen

stat64("crontabs", {st_mode=S_IFDIR|S_ISVTX|0730, st_size=4096, ...}) = 0
stat64("/etc/crontab", {st_mode=S_IFREG|0644, st_size=651, ...}) = 0
stat64("/etc/cron.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
Aber nicht den oben angegebenen.

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 28.10.2005 07:51:00

Wenn du den Eintrag mit crontab -e vorgenommen hast, dann weiss ich auch nicht mehr weiter. Kannst du den Eintrag nicht einfach in /etc/crontab machen?

Antworten