cron.d - Eigene Einträge werden (augenscheinlich) ignoriert

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

cron.d - Eigene Einträge werden (augenscheinlich) ignoriert

Beitrag von derstefan » 07.08.2005 14:55:00

Servus,

folgende Beobachtung auf frischem Sarge:

Wenn ich eigene Jobs im cron.d Verzeichnis hinterlege, werden diese nicht wie gewünscht ausgeführt, es sieht danach aus als würden sie einfach ingoriert werden.

So sieht es aus.

/etc/cron.d/testcron [root:root 644]

Code: Alles auswählen

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILT=root

*/5 * * * *	root	/root/testscript
/root/testscript[root:root 755]

Code: Alles auswählen

#!/bin/sh
datum=`date +"%H.%M"` 
cp /tmp/testdatei /tmp/testdatei-$datum
Nach dem ablegen des "testcron" in cron.d sagt die syslog

Code: Alles auswählen

(*system*testcron) RELOAD (/etc/cron.d/testcron)
Ausgeführt wird der job allerdings nicht und root bekommt auch keine mail wie erwartet.
Die beiden jobs von exim und php4(waren standardmäßig da) werden ohne Murren ausgeführt.

Wenn ich den Eintrag in die crontab schreibe(neu angelegt), wird er ausgeführt. Bzw. wurde ausgeführt. Denn ich hatte die /etc/crontab versehentlich gelöscht, mit crontab-r und crontab-e wollte ich die wieder neu anlegen, doch wird zumindest in /etc keine crontab datei angelegt. Nach crontab-e ist sie allerdings in /tmp, bis zur "new.. install" Meldung vorhanden.
Lege ich die Datei(crontab) unter /etc neu an, bleibt sie ohne Wirkung.

mmhh, ich glaube ich hab mich verheddert... Ein Dilema...

Meine Fragen wären nun,

1. Was mache ich falsch beim Versuch den job über cron.d ausführen zu lassen?
2. Wie verhält es sich nun mit der crontab?
2.a Wie kann ich meinen Fehler wieder korrigieren?


ciao, Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 07.08.2005 16:24:37

Hallo derstefan,
erstmal herzlich Wilkommen hier im Forum :wink:

Ich würde erstmal die "/etc/crontab" wieder in Ordnung bringen.

Code: Alles auswählen

debian:/home/fuzzy# ls -l  /etc/crontab 
-rw-r--r--  1 root root 651 2004-07-28 22:44 /etc/crontab

debian:/home/fuzzy# 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.
# This file also has a username field, 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    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#

Ich würde "/etc/crontab" anlegen, rechte anpassen und "cron" neustarten:

Code: Alles auswählen

/etc/init.d/cron restart

Ich lege einen cronjob immer mit "crontab -e" an - etwas verändert..

Code: Alles auswählen

sid:/tmp# crontab -l | grep testscript
* * * * *   /root/testscript

sid:/home/fuzzy# grep testscript  /var/spool/cron/crontabs/root 
* * * * *   /root/testscript

sid:/tmp# cat /root/testscript 
#!/bin/sh
datum=`/bin/date +"%H.%M"`
/bin/cp /tmp/testdatei /tmp/testdatei-$datum
/bin/ls /tmp/test*
es wird empfohlen im Script nur absolute Pfade einzutragen, also "/bin/date" statt "date" und so weiter. Dieses "/bin/ls /tmp/test*" habe ich eingetragen, damit mehr output entsteht und Du sicher eine Mail von "cron" bekommst.

Im Syslog sieht es dann so aus:

Code: Alles auswählen

sid:/home/fuzzy# grep -i cron /var/log/syslog
[...]
Aug  7 16:19:06 sid crontab[9175]: (root) BEGIN EDIT (root)
Aug  7 16:19:15 sid crontab[9175]: (root) REPLACE (root)
Aug  7 16:19:15 sid crontab[9175]: (root) END EDIT (root)
Aug  7 16:20:01 sid /usr/sbin/cron[7877]: (root) RELOAD (crontabs/root)
Aug  7 16:20:01 sid /USR/SBIN/CRON[9182]: (root) CMD (/root/testscript)
Aug  7 16:21:01 sid /USR/SBIN/CRON[9191]: (root) CMD (/root/testscript)
Aug  7 16:22:01 sid /USR/SBIN/CRON[9200]: (root) CMD (/root/testscript)
Hilft Dir das?

http://www.rootforum.de/forum/viewtopic.php?t=16846

Gruß fuzzy

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 07.08.2005 17:57:47

Grüß Dich,

vielen Dank für Deine ausführliche Hilfestellung.
Hilft Dir das?
Der Link ja, doch nicht beim eigenlichem Problem

Habe Deine Angaben nachvollzogen, es passiert nun folgendes:

Code: Alles auswählen

Aug  7 17:05:45 vserver900 crontab[10211]: (root) BEGIN EDIT (root)
Aug  7 17:06:13 vserver900 crontab[10211]: (root) REPLACE (root)
Aug  7 17:06:13 vserver900 crontab[10211]: (root) END EDIT (root)
Aug  7 17:07:01 vserver900 /usr/sbin/cron[10063]: (root) RELOAD (crontabs/root)
Aug  7 17:17:01 vserver900 /USR/SBIN/CRON[10981]: (root) CMD (root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly)
Aug  7 17:17:01 vserver900 /USR/SBIN/CRON[10982]: (root) CMD (   run-parts --report /etc/cron.hourly)
Also der Aufruf meines jobs müßte an Stelle des RELOAD zu lesen sein, doch ist er es nicht( Hey, ich bin Anfänger)

/etc/crontab [root root 644]

Code: Alles auswählen

# /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.
# This file also has a username field, 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    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#
/var/spool/cron/crontabs/root

Code: Alles auswählen

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

# m h dom mon dow user	command
17 *	* * *	root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6	* * 7	root	test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6	1 * *	root	test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#

* *	* * *	root	/root/testscript 
Cron meint hierzu:

Code: Alles auswählen

/bin/sh: line 1: root: command not found
Ok, daß die beiden ersten Zeilen verschieden sehe ich, doch wie biege ich das gerade.

Kann ich die /etc/crontab per editor editieren wie ich will, z.B "test -x /usr/sbin/anacron ||" in der ersten Zeile einfügen, oder muß ich "crontab -e" benutzen? Oder wie? Oder was? ... Mensch, die Verwirrung nimmt zu. Ich glaube ich brauche eine Denkpause...

ciao, Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 07.08.2005 18:30:44

Hallo derstefan,
äh, jetzt habe ich micht etwas mit /etc/crontab beschäftigt :wink:
mein Tipp:

Code: Alles auswählen

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.
# This file also has a username field, that none of the other crontabs do.

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

# m h dom mon dow user  command
17 *    * * *   root    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#

* * * * * root /root/testscript
und "/var/spool/cron/crontabs/root" erstmal ignorieren:

Code: Alles auswählen

cat  /var/spool/cron/crontabs/root

# * * * * *   /root/testscript
...soweit meine Tipps und hoffentlich habe ich jetzt nix vergessen :wink:

In der "/etc/crontab" muss der "user" in die Zeile eingetragen werden,
bei dem "crontab -e"-Eintrag muss der entsprechende "user" "crontab -e" aufrufen und dann erscheint der "user" nicht mehr in der Zeile, die sich daraus ergibt "/var/spool/cron/crontabs/root".

So sollte Dein Script jede Minute ausgeführt werden.

Code: Alles auswählen

sid:/tmp# grep -i cron /var/log/syslog
[...]
Aug  7 18:25:16 sid crontab[3945]: (root) BEGIN EDIT (root)
Aug  7 18:25:18 sid crontab[3945]: (root) END EDIT (root)
Aug  7 18:26:01 sid /usr/sbin/cron[3037]: (root) RELOAD (crontabs/root)
Aug  7 18:26:01 sid /USR/SBIN/CRON[3950]: (root) CMD (/root/testscript)
Aug  7 18:27:01 sid /USR/SBIN/CRON[3963]: (root) CMD (/root/testscript)
Aug  7 18:28:01 sid /USR/SBIN/CRON[3981]: (root) CMD (/root/testscript)
Aug  7 18:29:01 sid /USR/SBIN/CRON[3999]: (root) CMD (/root/testscript)
[...]
Gruß fuzzy

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 07.08.2005 19:30:31

Servus,

vielen Dank für Deine Nachforschungen.

Ich versuche es zu verstehen. Die Aufgaben in der /etc/crontab sind systemweit und brauchen einen Benutzer der den|die einzelnen Aufruf[e] ausführt. Unter /var/spool/cron/crontabs/[USER] liegen die benutzereigenen Cronjobs, die mit crontab -e erstellt, bearbeitet werden und keinen user zum Aufruf benötigen, da die Jobs sowieso mit den Rechten des Benutzers ausgeführt werden, der den job erstellt hat. Richtig?

Also habe ich die /"etc/crontab", wie von Dir gezeigt, gefüllt und mich mit crontab -r dem alten Jobs(dedicated for root) entledigt. Weil unnötig, da ich sowieso der einzigste User bin.

Zur Folge hatte das folgende Einträge in der syslog

Code: Alles auswählen

 /usr/sbin/cron[10063]: (*system*) RELOAD (/etc/crontab)
 crontab[19918]: (root) DELETE (root)
Nur leider keine Aufrufe des testscriptes...

Noch aufgefalle ist mir diese Meldung:

Code: Alles auswählen

/USR/SBIN/CRON[16283]: (root) CMD (root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly)
/USR/SBIN/CRON[16284]: (root) CMD (   run-parts --report /etc/cron.hourly)
und die mail an root:

Code: Alles auswählen

Subject: Cron <root@vserver900> root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Message-Id: <20050807161701.91AFD3370F@localhost>
Date: Sun,  7 Aug 2005 18:17:01 +0200 (CEST)

/bin/sh: line 1: root: command not found
nach dem ich die erste Zeile geändert habe in

Code: Alles auswählen

17 *    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly
Bekommt root die Meldung nicht wieder und in der syslog steht nur noch

Code: Alles auswählen

 /USR/SBIN/CRON[21299]: (root) CMD (   test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly) 


Alldings glaube ich kaum, damit was gebessert zu haben, denn die Zeile wie sie vorher war, scheint ja so per default auszuschauen und damit korrekt gewesen zu sein.

Wie ich es schon in dem vorhergehenden Beitrag erwähnt habe, ist die Flut an Infos einfach zuviel für mein naives Hirn, das muß sich erstmal ordnen.
Und während ich nix gebacken bekomme, laufen die anderen jobs sauben durch, als wollten sie mich damit verspotten :-)

ciao, Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 07.08.2005 20:05:40

derstefan hat geschrieben:Servus,

Ich versuche es zu verstehen. Die Aufgaben in der /etc/crontab sind systemweit und brauchen einen Benutzer der den|die einzelnen Aufruf[e] ausführt. Unter /var/spool/cron/crontabs/[USER] liegen die benutzereigenen Cronjobs, die mit crontab -e erstellt, bearbeitet werden und keinen user zum Aufruf benötigen, da die Jobs sowieso mit den Rechten des Benutzers ausgeführt werden, der den job erstellt hat. Richtig?

Also habe ich die /"etc/crontab", wie von Dir gezeigt, gefüllt und mich mit crontab -r dem alten Jobs(dedicated for root) entledigt. Weil unnötig, da ich sowieso der einzigste User bin.

[...]

Code: Alles auswählen

[...]
/bin/sh: line 1: root: command not found

Code: Alles auswählen

 /USR/SBIN/CRON[21299]: (root) CMD (   test -x /usr/sbin/anacron || run-parts --report /etc/cron.hourly) 
Jo, aus meiner Sicht ist das korrekt mit "crontab -e" und "/etc/crontab"

Die Fehlermeldung passt zu dem "crontab -e" mit "root" zuviel :wink:

Der Cron-Aufruf [21299] iist korrekt und ist mindestens ein Debianstandard, der sich aus
der /etc/crontab ergibt:

Code: Alles auswählen

17 *    * * *   root    run-parts --report /etc/cron.hourly
...wird jeden Tag, jede Stunde um "17 nach" ausgeführt

Code: Alles auswählen

debian:/home/fuzzy# grep -i cron /var/log/syslog 
[...]
Aug  7 15:17:01 debian /USR/SBIN/CRON[1496]: (root) CMD (   run-parts --report /etc/cron.hourly)
Aug  7 16:17:01 debian /USR/SBIN/CRON[1538]: (root) CMD (   run-parts --report /etc/cron.hourly)
Aug  7 17:17:01 debian /USR/SBIN/CRON[1574]: (root) CMD (   run-parts --report /etc/cron.hourly)
Aug  7 18:17:01 debian /USR/SBIN/CRON[1578]: (root) CMD (   run-parts --report /etc/cron.hourly)
Aug  7 19:17:01 debian /USR/SBIN/CRON[1582]: (root) CMD (   run-parts --report /etc/cron.hourly)
Du kannst gerne Ausschnitte aus dem /var/log/syslog posten,
dann bitte die Komplette Zeile - auch mit der Systemzeit, dann kann man es mit "crontab" bzw. mit mail-Fehlermeldungen (hoffentlich) in Verbindung bringen.
Sehr lange Ausschnitte bitte nach http://nopaste.debianforum.de/ und einen LInk ins Forum.

Aber nochmal zu Deinem eigentlchen Problem.
Das Testscript "zu Fuß" in der kommandozeile aufgerufen klappt?
Tauchen weitere Fehlermeldungen an oben genannten Stellen auf?
Haben sich eventuell Fehler eingeschlichen

Code: Alles auswählen

cat /root/testscript 

Code: Alles auswählen

ls -l /root/testscript 

Code: Alles auswählen

grep testscript /etc/crontab
Gruß fuzzy

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 07.08.2005 20:55:07

Grüß Dich,

Habe die erste Zeile im der crontab wieder zurück verwandelt.
Auch den cron nochmal neu gestartet (cron restart).
In er syslog stehen keine weiteren Hinweis, root bekommt keine mail.
Zu Fuß wird das script ausgeführt.

Code: Alles auswählen

steffel:~# cat /root/testscript
#!/bin/sh
datum=`/bin/date +"%H.%M"`
/bin/cp /tmp/testdatei /tmp/testdatei-$datum
/bin/ls /tmp/test*vserver900:~#

Code: Alles auswählen

steffel:~# ls -l /root/testscript
-rwxr--r--  1 root root 100 Aug  7 16:59 /root/testscript

Code: Alles auswählen

steffel:~# grep testscript /etc/crontab
* * * * * root /root/testscript

Code: Alles auswählen

Aug  7 20:33:01 steffel /usr/sbin/cron[20913]: (*system*) RELOAD (/etc/crontab)
Aug  7 20:36:58 steffel /usr/sbin/cron[10787]: (CRON) INFO (pidfile fd = 3)
Aug  7 20:36:58 steffel /usr/sbin/cron[10788]: (CRON) STARTUP (fork ok)
Aug  7 20:36:58 steffel /usr/sbin/cron[10788]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
dokumentiert die Änderung der crontab und den neustart. Keine weiteren relevanten Einträge.

Taucht in Deiner Log der Eintrag " (*system*) RELOAD (/etc/crontab)" ebenfalls auf, wenn Du die crontab verändert hast? Kann in garnicht finden.

Sorry, ich habe keine blassen Schimmer, wie ich weiter mithelfen könnte das Problem zu lokalisieren. Oh mann, sollte ich wirklich einen reboot machen...

Es reicht mir für heute.
ciao, Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 07.08.2005 21:25:41

Mir fallen im Moment keine Fehler auf - höchstens "cron restart" würde ich anders machen...

Code: Alles auswählen

sid:/tmp# cron restart           
cron: can't lock /var/run/crond.pid, otherpid may be 12401: Resource temporarily unavailable
sid:/tmp# /etc/init.d/cron restart
Restarting periodic command scheduler: cron.

Code: Alles auswählen

sid:/tmp# grep -i cron /var/log/syslog
[...]
Aug  7 21:17:02 sid /USR/SBIN/CRON[12540]: (root) CMD (/root/testscript )
Aug  7 21:17:02 sid /USR/SBIN/CRON[12542]: (root) CMD (   run-parts --report /etc/cron.hourly)
Aug  7 21:18:01 sid /USR/SBIN/CRON[12564]: (root) CMD (/root/testscript )
Aug  7 21:19:01 sid /usr/sbin/cron[12509]: (*system*) RELOAD (/etc/crontab)
Aug  7 21:19:01 sid /USR/SBIN/CRON[12580]: (root) CMD (/root/testscript )
Aug  7 21:19:35 sid /usr/sbin/cron[12591]: (CRON) INFO (pidfile fd = 3)
Aug  7 21:19:35 sid /usr/sbin/cron[12592]: (CRON) STARTUP (fork ok)
Aug  7 21:19:35 sid /usr/sbin/cron[12592]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Aug  7 21:19:51 sid cron[12593]: (CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 12592: Resource temporarily unavailable)
Aug  7 21:19:54 sid /usr/sbin/cron[12596]: (CRON) INFO (pidfile fd = 3)
Aug  7 21:19:54 sid /usr/sbin/cron[12597]: (CRON) STARTUP (fork ok)
Aug  7 21:19:54 sid /usr/sbin/cron[12597]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Aug  7 21:20:01 sid /USR/SBIN/CRON[12599]: (root) CMD (/root/testscript )
Das scheint ein Server zu sein?
...einen reboot würde ich dann erst machen, wenn Du Zeit hast und ausgeruht bist :wink:
...ein reboot würde Dir aber eine große "Klarheit" verschaffen, das kann leider auch ernüchternd sein...

Hast Du eine einfache Workstation zum Testen/probieren?

Ich kann jetzt auch nicht mehr so klar sehen und werde nicht mehr viel computern...

Gruß fuzzy

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 09.08.2005 15:11:43

Grüß Dich,

es ist zum verrückt werden, dem Dämon ist es gerade ******egal was ich im füttern will, er nimmt einfach nix an. Reboot ist gemacht, kein Kunststück, ein Griff unter den Tisch hat gereicht. Doch gebessert hat es nchts. Die vorhandenen crons laufen, meiner nicht....

Ich fühl mich wie bei windows, wenn's dann halt irgendwann Zeit für eine Neuistallation ist ...Oh Mann, das frustriert(ein bisschen).

Danke für Deine Anteilnahme
ciao, Stefan

tanita
Beiträge: 78
Registriert: 14.08.2003 13:45:27
Wohnort: Muc
Kontaktdaten:

Beitrag von tanita » 09.08.2005 22:48:54

Hi derstefan,

und, geht's jetzt? Ich hatte das gleiche Problem.. Das Witzige war, habe zwei Rechner auf denen Sarge installiert ist. Gleiches Skript, gleicher crontab-Eintrag, bei der einen Maschine geht es, bei der anderen nicht..

Zum Testen ganz billig:

Code: Alles auswählen

#!/bin/bash
LOG="/var/log/1test.log"
echo -n "testlog... " >>$LOG
echo "`date`" >>$LOG
echo " " >>$LOG

Code: Alles auswählen

chmod +x test.sh

Code: Alles auswählen

bibo:~# crontab -l
*/1 * * * *     /root/test.sh

Code: Alles auswählen

/etc/init.d/cron restart

Ob das damit was zu tun hat..:| : Auf der einen, bei der es nicht ging, war default joe eingestellt. Komme mit dem irgendwie nicht klar. Hatte dann auf vi gesetzt, gleiche Prozedur. Dann ging es jedenfalls..

Servus T.

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 18.08.2005 22:10:01

Servus,
mittlerweile habe ich das Sarge neu aufgespielt, allerdings glaube ich, daß es mir schlicht am Grundverständnis für die Sache fehlt.
Ursprünglich ging es mir um die Aufträge in /etc/cron.d. Eigene Aufträge wurden ignoriert.
Wenn man es genau nimmt, werden sie immernoch|schonwieder ignoriert..... Es ist zum heulen.
Schreibe ich die Aufträge in die /etc/crontab oder führe sie manuell aus, werden sie ohne Murren abgearbeitet. Meine Einträge dort werden nun wenigstens beachtet.
Wie kann ich jetzt rausfinden, was den Kerle an meine Aufträgen nervt? Das das cron.d Verzeichnis durchlaufen wird, schließe ich daraus, da der php4 Auftrag gestartet wird.
Gibt's für den cron sowas wie einen "verbosen/debug" schalter?

Als Testaufbau hab ich Dein Beispiel genommen.
/etc/cron.d/testcron(644)

Code: Alles auswählen

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

* * * * *  root    /root/test.sh
wird ignoriert(auch in den logs) und mail bekommt keine Nachricht. Manuell oder per crontab füllen sich die Logdateien wieder.
Den Cron mehrere mal neu gestartet, wobei dies wohl genauso unnötig ist wie die Schreibweise "*/1* * * * .... "

tjo... so sieht's aus...

ciao, Stefan

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 19.08.2005 05:18:09

Hallo derstefan,
hier bei mir scheint es zu klappen, allerdings habe ich mein "test-shellscript" genommen :wink:

Code: Alles auswählen

sid:/tmp# ls -l /etc/cron.d/test-shellscript                                     
-rw-r--r--  1 root root 61 2005-08-19 05:05 /etc/cron.d/test-shellscript

sid:/tmp#  cat /etc/cron.d/test-shellscript 
#!/bin/sh

* * * * * root /usr/local/bin/test-shellscript 

sid:/tmp# ls -l  /usr/local/bin/test-shellscript 
-rwxrwxrwx  1 fuzzy fuzzy 236 2005-08-19 04:54 /usr/local/bin/test-shellscript

sid:/tmp#  cat /usr/local/bin/test-shellscript 
#!/bin/sh

  /bin/date >> /tmp/date-cron.txt 
  /bin/cat     /tmp/date-cron.txt
...spätestens nach einem "/etc/init.d/cron restart

Code: Alles auswählen

Aug 19 05:00:51 sid /usr/sbin/cron[15784]: (CRON) INFO (pidfile fd = 3)
Aug 19 05:00:51 sid /usr/sbin/cron[15785]: (CRON) STARTUP (fork ok)
Aug 19 05:00:51 sid /usr/sbin/cron[15785]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Aug 19 05:01:01 sid /USR/SBIN/CRON[15787]: (root) CMD (/usr/local/bin/test-shellscript )
Aug 19 05:02:01 sid /USR/SBIN/CRON[15799]: (logcheck) CMD (   if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi)
Aug 19 05:02:01 sid /USR/SBIN/CRON[15800]: (root) CMD (/usr/local/bin/test-shellscript )
Aug 19 05:03:01 sid /USR/SBIN/CRON[16433]: (root) CMD (/usr/local/bin/test-shellscript )
Aug 19 05:04:01 sid /USR/SBIN/CRON[16446]: (root) CMD (/usr/local/bin/test-shellscript )
Aug 19 05:05:01 sid /USR/SBIN/CRON[16455]: (root) CMD (/usr/local/bin/test-shellscript )

Code: Alles auswählen

From: Cron Daemon <root@sid>                                                        
To: root@sid                                                                        
Subject: Cron <root@sid> /usr/local/bin/test-shellscript                            
X-Cron-Env: <SHELL=/bin/sh>                                                         
X-Cron-Env: <HOME=/root>                                                            
X-Cron-Env: <PATH=/usr/bin:/bin>                                                    
X-Cron-Env: <LOGNAME=root>                                                          
Message-Id: <E1E5xBl-0004HS-HD@sid>                                                 
Date: Fri, 19 Aug 2005 05:05:01 +0200                                               
                                                                                    
Fri Aug 19 05:01:01 CEST 2005                                                       
Fri Aug 19 05:02:01 CEST 2005                                                       
Fri Aug 19 05:03:01 CEST 2005                                                       
Fri Aug 19 05:04:01 CEST 2005                                                       
Fri Aug 19 05:05:01 CEST 2005 
Hilft Dir das?

Gruß fuzzy

crazyed

Beitrag von crazyed » 19.08.2005 07:51:41

Moin,
weil ich hier nicht so ganz :lol: durchblicke mal 'ne kurze Frage:
Schon mal man crontab durchgelesen?

Die Befehlszeile bei SYNOPSIS ist dazu da cronjobs am System anzumelden. Das blosse kopieren in das Verzeichnis reicht da nicht aus.

derstefan
Beiträge: 16
Registriert: 06.08.2005 21:04:05

Beitrag von derstefan » 19.08.2005 19:49:25

Servus Fuzzi,

hach....

Code: Alles auswählen

debian:~# ls -l /etc/cron.d/test-shellscript
-rw-r--r--  1 root root 205 2005-08-19 19:16 /etc/cron.d/test-shellscript
debian:~#

Code: Alles auswählen

debian:~# cat /etc/cron.d/test-shellscript
#!/bin/sh
#
# Set PATH, otherwise restart-scripts won't find start-stop-daemon
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

* * * * * root /usr/local/bin/test-shellscript
Muß der Weg zum Interpreter(#!/bin/sh) hier angebengen werden?

Code: Alles auswählen

debian:~# ls -l  /usr/local/bin/test-shellscript
-rwxrwxrwx  1 root staff 79 2005-08-19 19:09 /usr/local/bin/test-shellscript
debian:~#

Code: Alles auswählen

debian:~# cat /usr/local/bin/test-shellscript
#!/bin/sh

  /bin/date >> /tmp/date-cron.txt
  /bin/cat     /tmp/date-cron.txt 

Code: Alles auswählen

grep -i cron /var/log/syslog
Aug 19 17:07:19 localhost /usr/sbin/cron[14920]: (CRON) INFO (pidfile fd = 3)
Aug 19 17:07:19 localhost /usr/sbin/cron[14921]: (CRON) STARTUP (fork ok)
Aug 19 17:07:19 localhost /usr/sbin/cron[14921]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Aug 19 17:09:01 localhost /USR/SBIN/CRON[14926]: (root) CMD (  [ -d /var/lib/php4 ] && find /var/lib/php4/ -type f -cmin +$(/usr/lib/php4/maxlifetime) -print0 | xargs -r -0 rm)
Aug 19 17:10:01 localhost /usr/sbin/cron[14921]: (*system*test-shellscript) RELOAD (/etc/cron.d/test-shellscript)
Aug 19 17:17:01 localhost /USR/SBIN/CRON[14960]: (root) CMD (   run-parts --report /etc/cron.hourly)
debian:~#
...Ich weiß auch nicht... Über die Kommandozeile oder per crontab (direkt und nicht über crontab -e bearbeitet) ergibt das ein positives Ergebnis...
Schon mal man crontab durchgelesen?
Die Befehlszeile bei SYNOPSIS ist dazu da cronjobs am System anzumelden. Das blosse kopieren in das Verzeichnis reicht da nicht aus.
Das blick ich jetzt nicht richtig.. Wie meinst Du das mit dem "anmelden". Muß ich ein Auftrag in cron.d noch explizit anmelden? Der cron macht doch ein reload des Verzeichnisses und im Aufruf selbst steht der user... Oder ist das nicht das was Du meinst?

Oh Mann, mein armer Kopf. Ich bin verwirrt.

machts gut, Stefan

PS: Mit großer Wahrscheinlichkeit ist es so, daß ich das Problem bin, denn ich hatte mittlerweile auch mal Zugriff auf zwei andere Server(vserver,root). Und auch dort bin ich kläglich gescheitert. Die selben niederschmetternden Resultate meiner Bemühungen.

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 19.08.2005 20:00:09

derstefan hat geschrieben:

Code: Alles auswählen

debian:~# cat /etc/cron.d/test-shellscript
#!/bin/sh
#
# Set PATH, otherwise restart-scripts won't find start-stop-daemon
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

* * * * * root /usr/local/bin/test-shellscript
Muß der Weg zum Interpreter(#!/bin/sh) hier angebengen werden?

Oh Mann, mein armer Kopf. Ich bin verwirrt.
8O Nein, "#!/bin/sh" ist da überflüssig - sorry mein Fehler.

Äh, die "man crontab" war auch nicht so meine Standartlektüre...
Mein Standart war immer "crontab -e" usw...

@crazyed
aus meiner Sicht wäre in meinem Beispiel der korrekte Weg, der einmalige Aufruf von:

Code: Alles auswählen

crontab /etc/cron.d/test-shellscript
und dann kann kann diese Datei mit Inhalt gefüllt werden, welches Shellscript von welchem User wie oft ausgeführt wird. Ist das der korrekte Weg?

Gruß fuzzy

Antworten