Cronjob zum laufen bekommen - Wie?

Bash, Shell, PHP, Python, Perl, CGI
dingoss
Posts: 23
Joined: 2005-09-12 17:38

Cronjob zum laufen bekommen - Wie?

Post by dingoss » 2005-09-23 18:29

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.

captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten

Re: Cronjob zum laufen bekommen - Wie?

Post by captaincrunch » 2005-09-23 18:32

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.
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

dingoss
Posts: 23
Joined: 2005-09-12 17:38

Re: Cronjob zum laufen bekommen - Wie?

Post by dingoss » 2005-09-23 18:36

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

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by flo » 2005-09-23 18:50

Probiers mal mit fünf Sternen ...

flo.

dingoss
Posts: 23
Joined: 2005-09-12 17:38

Re: Cronjob zum laufen bekommen - Wie?

Post by dingoss » 2005-09-23 19:04

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.

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by flo » 2005-09-23 19:19

Das Script läuft aber?
Und liegt wirklich in /etc ???

Gut, WAS STEHT DENN DANN DARÃ?BER?

poste mal den kompletten crontab -l ...

flo.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Cronjob zum laufen bekommen - Wie?

Post by Joe User » 2005-09-23 19:37

Code: Select all

chmod 0755 user.sh
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

dingoss
Posts: 23
Joined: 2005-09-12 17:38

Re: Cronjob zum laufen bekommen - Wie?

Post by dingoss » 2005-09-23 19:55

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

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by flo » 2005-09-23 20:36

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.

dingoss
Posts: 23
Joined: 2005-09-12 17:38

Re: Cronjob zum laufen bekommen - Wie?

Post by dingoss » 2005-09-23 20:56

back to the roots,
wo find ich das Log das Du meinst?

rǃppz
Posts: 127
Joined: 2003-04-02 14:14

Re: Cronjob zum laufen bekommen - Wie?

Post by rǃppz » 2005-10-10 21:47

Meistens wird der Output auch an das Postfach des Benutzers also z.B. root geliefert.

sziebeck
Posts: 9
Joined: 2003-06-26 12:01

Re: Cronjob zum laufen bekommen - Wie?

Post by sziebeck » 2006-01-30 19:56

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

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by flo » 2006-01-30 20:34

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.

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by isotopp » 2006-01-30 21:43

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.

rootmaster
Posts: 483
Joined: 2002-04-28 13:30
Location: Hannover

Re: Cronjob zum laufen bekommen - Wie?

Post by rootmaster » 2006-01-30 22:33

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"

sziebeck
Posts: 9
Joined: 2003-06-26 12:01

Re: Cronjob zum laufen bekommen - Wie?

Post by sziebeck » 2006-01-30 23:31

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

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Cronjob zum laufen bekommen - Wie?

Post by isotopp » 2006-01-30 23:37

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.

sziebeck
Posts: 9
Joined: 2003-06-26 12:01

mmh...

Post by sziebeck » 2006-01-31 16:53

Könntet ihr mir denn jetzt irgendwie helfen ? das wäre nicht verkeht :-)

captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten

Re: Cronjob zum laufen bekommen - Wie?

Post by captaincrunch » 2006-01-31 18:55

Wie viel Hilfe willst du eigentlich noch? Ausführlicher und besser geht's ja wohl kaum noch. *kopfschüttel*
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

sziebeck
Posts: 9
Joined: 2003-06-26 12:01

Re: Cronjob zum laufen bekommen - Wie?

Post by sziebeck » 2006-02-01 15:10

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:

chris76
Moderator
Moderator
Posts: 1878
Joined: 2003-06-27 14:37
Location: Germering

Re: Cronjob zum laufen bekommen - Wie?

Post by chris76 » 2006-02-01 16:35

Gruß Christian

BofH excuses: YOU HAVE AN I/O ERROR -> Incompetent Operator error

goresplatter
Posts: 15
Joined: 2006-01-20 00:28
Location: Halle (Saale)

Re: Cronjob zum laufen bekommen - Wie?

Post by goresplatter » 2006-02-08 13:11

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]