Page 1 of 1

Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 18:29
by dingoss
Hallo,

nach dem ich Tutorials gelesen habe versuchte ich es aufegene Faust
meien Cronjob zum laufen zu bekommen.

Dazu hab ich folgendes in /ect/crontab
eingetragen:

* * * * root sh user.sh

Hab dan brav den Daemon neu gestartet mit rccron restart und gehofft
es laeuft. Leider tuts nicht / wobei es eigentlich minuetlich aufgerufen werden sollte.

Kann mir jemand weiterhelfen? DAnke im Voraus.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 18:32
by captaincrunch
Woher soll Cron denn bitteschön wissen, wo deine user.sh liegt? Darüber hinaus kannst du dir bei richtiger Nutzung das anfängliche "sh" sparen.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 18:36
by dingoss
gut, logisch gefolgert sollte es dann so aussehen was in /etc/crontab
steht:

* * * * root /etc/user.sh

das tut aber auch nicht, hab ich auch schon probiert

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 18:50
by flo
Probiers mal mit fünf Sternen ...

flo.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 19:04
by dingoss
hi flo,
stimmt, sollten 5 sein, was aber trotzdem nix an der Situation aendert.
jetzt schauts so aus:

* * * * * root /etc/user.sh

das Zeugs was da drueber steht, ist das wichtig oder nicht?
Ich bezieh mich auf
SHELL
PATH
MAILTO
das muesste doch per deauflt richtig eingestellt sein.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 19:19
by flo
Das Script läuft aber?
Und liegt wirklich in /etc ???

Gut, WAS STEHT DENN DANN DARÃ?BER?

poste mal den kompletten crontab -l ...

flo.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 19:37
by Joe User

Code: Select all

chmod 0755 user.sh

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 19:55
by dingoss
flo wrote:Das Script läuft aber?
Und liegt wirklich in /etc ???
Gut, WAS STEHT DENN DANN DARÃ?BER?
poste mal den kompletten crontab -l ...
flo.
hi flo,
ja, das Skript befindet sich in /etc und heisst auch user.sh
ausfuehrbar ist es auch - fehlerfrei natuerlich.
Es sind zwar ein paar echo drin, aber das sollte doch nix ausmachen, oder?

in /etc/crontab steht

SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#blabla auskommentiert
#blabla auskommentiert
* * * * * root /etc/user.sh
#blabla auskommentiert
#blabla auskommentiert
#blabla auskommentiert

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 20:36
by flo
moment ... crontab -l ... da ist das Userfeld nicht nötig.

/bin/sh sollte sowieso ein Link auf bash sein, Definition der Variablen steht am Gleichheitszeichen, also sollte das passen - wenn nicht, schau ins Log, da müsste was drinstehen.

flo.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-09-23 20:56
by dingoss
back to the roots,
wo find ich das Log das Du meinst?

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2005-10-10 21:47
by rǃppz
Meistens wird der Output auch an das Postfach des Benutzers also z.B. root geliefert.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 19:56
by sziebeck
Hi, ich ahbe das gleiche problem ,
mein Cron zeigt zwar in der message an :


Jan 30 19:55:01 bravo715 /usr/sbin/cron[20535]: (root) CMD (/usr/local/bin/maildircheck.sh >/dev/null 2>&1)
Jan 30 19:55:01 bravo715 /usr/sbin/cron[20537]: (root) CMD (/usr/bin/mrtg /etc/mrtg/mrtg.cfg)
Jan 30 19:55:01 bravo715 /usr/sbin/cron[20539]: (root) CMD (root etss.sh)

aber er führt das script etss.sh einfach nicht aus :-(

editiert habe ich so:
crontab -e
dann

*/1 * * * * etss.sh
das script liegt im / verzeichnis

Gruss Sven

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 20:34
by flo
Sziebeck wrote: Jan 30 19:55:01 bravo715 /usr/sbin/cron[20539]: (root) CMD (root etss.sh)
<...>
*/1 * * * * etss.sh
das script liegt im / verzeichnis
Dann solltest Du das dem Herrn Cron auch so sagen ... probier einen absoluten Pfad - d.h. /etss.sh

flo.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 21:43
by isotopp
dingoss wrote:* * * * root sh user.sh
1. Wo kann man crontabs ablegen?

Cron liest /etc/crontab und alle Dateien in /etc/cron.d. Diese Dateien haben das "Format mit Userfeld".

Cron sucht außerdem in /var/spool/cron/tabs nach Dateien, die mit "crontab -e" von einem User angelegt worden sind und die so heißen, wie der User, der sie angelegt hat. Diese Dateien haben das "Format ohne Userfeld".

/etc/crontab gehört zum System und sollte niemals vom Admin geändert werden. /etc/cron.d/-Dateien werden von rpm-Packages installiert, heißen meist so wie das Package und sollten ebenfalls nicht vom Admin installiert oder geändert werden.

2. Wie sieht eine Crontab aus.

Alle Crontabs haben fünf Felder für Zeitangaben. Bei Crontabs mit Userfeld kommt dann ein Username als sechstes Feld. Alle folgenden Felder sind das Kommando und seine Parameter. Bei Crontabs ohne Userfeld entfällt das Userfeld, sodaß das Kommando Feld 6 und die folgenden belegt.

Die fünf ersten Felder geben die Zeit an, zu der ein Kommando ausgeführt wird. Die Felder sind von links nach rechts Minuten, Stunden, Tage, Monate und Wochentagsnummer. Wenn ein Feld "*" heißt, bedeutet dies "jeden".

* * * * * /usr/bin/touch /tmp/blafasel

wird also jede Minute, jede Stunde, jeden Tag, jeden Monat an jedem Wochentag das Kommando "/usr/bin/touch /tmp/blafasel" ausführen.

Die Felder werden miteinander ver-und-et.

50 12 * * 0 /usr/bin/touch /tmp/blafasel

wird also jeden Sonntag um 12:50 ausgeführt, also wenn es Wochentag 0 und Stunde 12 und Minute 50 ist.

Man kann Listen angeben:

0,10,20,30,40,50 * * * 0 /usr/bin/touch /tmp/blafasel

wird ausgeführt, wenn es Wochentag Nummer 0 UND (0 oder 10 oder 20 oder 30 oder 40 oder 50) Minuten ist. Also den ganzen Sonntag alle 10 Minuten genau auf dem 10-Minuten-Intervall.

3. Wie sieht das Environment von Cronjobs aus?

Dazu schreibt man sich /usr/local/bin/showme.sh:

Code: Select all

#! /bin/bash --

(
echo "user id:"
/usr/bin/id
echo

echo "current directory:"
pwd
echo

echo "Environment:"
/usr/bin/printenv | /usr/bin/sort
echo 
) > /tmp/showme.out
und führt dies aus (Warnung: Dies zerstört eine eventuell vorhandene Root-Crontab!):

Code: Select all

# cd 
# echo "* * * * * /usr/local/bin/showme.sh" > crontab.root
# crontab crontab.root
# crontab -l 
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (x installed on Mon Jan 30 21:37:00 2006)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* * * * * /usr/local/bin/showme.sh
Nach einer Minute findet man in /tmp/showme.out eine Datei, die User-ID, aktuelles Verzeichnis und Environment von Cronjobs findet. Hier ist vor allen Dingen der Inhalt von PATH und HOME interessant.

Mit

Code: Select all

# crontab -r
kann man die Crontab wieder löschen.

4. Wie schreibe ich cronjobs die funktionieren?

Beachte den Output von showme.out: Cronjobs haben unter Umständen nicht das richtige aktuelle Verzeichnis und verwenden unter Umständen nicht denselben $PATH wie Du.

Fange einen Cronjob also mit Anweisungen an, die den PATH und das aktuelle Verzeichnis korrekt definieren. Sorge auch sonst dafür, daß das Environment korrekt konfiguriert ist ("export WASAUCHIMMER=wasauchimmer").

Code: Select all

#! /usr/bin/bash --

PATH=....
cd /...


Setze also den PATH so, wie er auch bei Dir in Deiner Shell gesetzt ist und wechsle als erstes im Cronjob manuell in das Home-Verzeichnis.

Schreibe außerdem in Deinem Cronjob ein Log. Prüfe dazu den Exitstatus kritischer Befehle.

Sende bei Fehlern eine Mail an den Eigentümer des Cronjobs (manche Crons senden einem automatisch den Stdout und das Stderr von Cronjobs zu, sodaß man hier nur ein "echo" einbauen muß, um Fehler zu melden.)

Verwende im Zweifel vollständige Pfadnamen für Kommandos und Logdateien.

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 22:33
by rootmaster
isotopp [sehr ausführlich beschrieben] wrote:
dingoss wrote:* * * * root sh user.sh

1. Wo kann man crontabs ablegen?

Cron liest /etc/crontab und alle Dateien in /etc/cron.d. Diese Dateien haben das "Format mit Userfeld".

Cron sucht außerdem in /var/spool/cron/tabs nach Dateien, die mit "crontab -e" von einem User angelegt worden sind und die so heißen, wie der User, der sie angelegt hat. Diese Dateien haben das "Format ohne Userfeld".

/etc/crontab gehört zum System und sollte niemals vom Admin geändert werden. /etc/cron.d/-Dateien werden von rpm-Packages installiert, heißen meist so wie das Package und sollten ebenfalls nicht vom Admin installiert oder geändert werden.
[...]
nicht zu vergessen, dass man bei änderungen an der zentralen crontab dem cron ein SIGHUP senden sollte ;)

ansonsten, respekt für die muße zur ausführlichen antwort 8)

"back to the roots"

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 23:31
by sziebeck
Aber wieso ging das bei dem anderen Server so einfach ???

Wenn ich euch richtig verstanden habe ,muss aich also ein file erstellen ,und in den etc/cron.d legen ???

MFG
Sven

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-30 23:37
by isotopp
Sziebeck wrote:Wenn ich euch richtig verstanden habe ,muss aich also ein file erstellen ,und in den etc/cron.d legen ???
hochblätter
Isotopp wrote: /etc/cron.d/-Dateien werden von rpm-Packages installiert, heißen meist so wie das Package und sollten ebenfalls nicht vom Admin installiert oder geändert werden.
Ã?h, nein, hast Du nicht richtig verstanden.

mmh...

Posted: 2006-01-31 16:53
by sziebeck
Könntet ihr mir denn jetzt irgendwie helfen ? das wäre nicht verkeht :-)

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-01-31 18:55
by captaincrunch
Wie viel Hilfe willst du eigentlich noch? Ausführlicher und besser geht's ja wohl kaum noch. *kopfschüttel*

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-02-01 15:10
by sziebeck
Ich muss leider sagen ,das das forum hier etwas von eingebildet hat !

Ich habe alles getan ,und es funzt trotzdem nicht !

Toll wie ihr helfen könnt ,mit dummen sprüchen ,ihr seid die helden!

Ein Forum wird immer beschissener ,je mehr leute da sind ,schade ,ich habe das Forum besser in ereinnerung ...

Egal ,ist halt schwund! :idea:

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-02-01 16:35
by chris76

Re: Cronjob zum laufen bekommen - Wie?

Posted: 2006-02-08 13:11
by goresplatter
Ich hatte am Anfang auch das Problem mit Herrn Cron, der alles, nur nix, was ich wollte gemacht hat. (<ENDE DAU Aussage> :wink: )

Bei mir hat's geholfen, dem crontab-Editor direkt einen User-Namen anzugeben:

Code: Select all

crontab -u <some_user> -e
Danach wird die crontab für <some_user> angezeigt und Du kannst die editieren. Dafür sparst Du die die explizite Angabe des user-Namens in der job-Zeile:

Code: Select all

* * * * * /usr/bin/slursh.pl
Danach hat's auch mit meinem Nachbarn geklappt...[/color]