fraenky
Goto Top

Crontab zeigt keine Wirkung

Hallo zusammen.

Ich bin gerade von Windows auf Linux umgestiegen und möchte jetzt ein Script zeitgesteuert über crontab laufen lassen.
Das erweist sich als schwieriger, als es auf den ersten Blick aussieht.

Was bisher geschah:

Zuerst habe ich ein kleines Script geschrieben, das einfache Zeilenmanipulationen an einer Textdatei vornimmt.
Dieses gehöhrt root und liegt im Ordner /usr/bin und ist ausführbar und funktioniert soweit.

Dann habe ich eine Kopie erzeugt mit
crontab /etc/crontab 
und diese dann editiert mit
crontab -e
Sodas ein
crontab -l
folgendes Ergebnis liefert:
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin:/home/user/test
MAILTO=root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1h
#
1 * * * * root /home/user/test/test.sh
1 * * * * root test.sh
Wobei die letzten zwei Zeilen von mir eingefügt wirden in dem Versuch, das Script zeitgesteuert laufen zu lassen mit der Variation der unterschiedlichen Pfadangaben, falls das etwas mit dem nichtfunktionieren zu tuen hatt.
Hier zum testen minütlich.

Leider musste ich feststellen, das zwar der händische Aufruf funktioniert, der zeitgesteuerte über crontab hingegen nicht.

Das System ist SuseLinux und auch in den Ordner /etc/cron-hourly habe ich das Script test.sh abgelegt, aber ohne Wirkung.

Das Script selber hat folgenden Inhalt:
#!/bin/bash

DATEI=/pfad/test

tail -1 $DATEI >$DATEI.tmp

cat $DATEI >>$DATEI.tmp

head --lines=-1 $DATEI.tmp > $DATEI

rm /pfad/*.tmp*

Jetzt weiß ich in dieser Hinsicht nicht weiter und freue mich über helfendes mitdenken.
Das soll jetzt also der erste crontab-Lauf werden und irgendwas funktioniert nicht.

Gruß

Fraenky

Content-Key: 139968

Url: https://administrator.de/contentid/139968

Printed on: April 20, 2024 at 00:04 o'clock

Member: matze2010
matze2010 Apr 06, 2010 at 17:15:24 (UTC)
Goto Top
Hallo,

wenn ich mich nicht irre, dann sollten Zeile 1-8 in deiner privaten Crontab nix zu suchen haben. Dies ist die globale Crontab (welche du ja von /etc/crontab kopiert hast), die dann immer wieder prüft, ob es nicht lokale gibt und wenn es lokale gibt, dann wird wieder überprüft, ob......

Also einfach mal alles ausser Zeile 9+10 raus aus der user-crontab.

<edit>
achso, das root solltest du auch entfernen, weil die liste ja eh root gehört. Also nur noch

1 * * * * /home/user/test/test.sh
1 * * * * test.sh

</edit>

Lg
Matze
Member: Fraenky
Fraenky Apr 06, 2010 at 19:08:50 (UTC)
Goto Top
Hallo Matze.

Habe jetzt mal wie Empfohlen alles rausgenommen, aber leider keine Reaktion feststellbar.

Wie gesagt, ich habe bis jetzt noch keinen Cronjob gestartet, so das vielleicht noch was eingestellt werden muss, oder so.

Kennst Du denn eine Möglichkeit, überhaupt die Funktionsfähigkeit von Cron zu testen, wobei ich erwähnen muss, das der Dienst läuft.
Oder, falls das irgendwas mit dem Script zu tun hat, was könnte ich denn mal per Crontab starten, was sicher funktionieren müsste, um erst mal die Ansprechbarkeit von crontab zu überprüfen?

Dank soweit

und Gruß

Fraenky
Member: dog
dog Apr 06, 2010 at 19:39:53 (UTC)
Goto Top
1 * * * * root test.sh

Die Zeile kann nicht funktionieren, weil für cron nicht dein Working Directory definiert ist.

Du hast aber bei deinem Script schon
chmod +x test.sh
ausgeführt?
Member: matze2010
matze2010 Apr 06, 2010 at 19:53:19 (UTC)
Goto Top
Zitat von @Fraenky:
Oder, falls das irgendwas mit dem Script zu tun hat, was könnte ich denn mal per Crontab starten, was sicher funktionieren
müsste, um erst mal die Ansprechbarkeit von crontab zu überprüfen?

echo "rennt" > /home/user/crontest.txt

das schreibt "rennt" ohne "" in eine Textdatei. Den Ordnerpfad musst du natürlich anpassen.

<edit>
Du weißt aber schon, dass 1 * * * * immer zur ersten Minute einer Stunde ausgeführt wird?

Also 20:01, 21:01, 22:01 und nicht jede Minute?!

Du könntest also */1 nehmen, dann wäre es jede Minute.
</edit>

Lg
Matze
Member: Deepsys
Deepsys Apr 06, 2010 at 20:01:01 (UTC)
Goto Top
N'Abend,

was mir nicht so ganz einleuchtet: Warum kopierst du die crontab ??

Ich kenne es nur so das man als betreffender User einfach crontab -e ausführt und gut ...
Wenn man keine hat, nimmt crontab eine leere ...

VG
Deepsys

PS: Ich würde nie ein Linux-Script test.sh nennen, es gibt ein bashprogramm namens test (allerdings ohne .sh)und wenn du da beim Aufruf durcheinander kommst ....
Member: matze2010
matze2010 Apr 06, 2010 at 20:09:16 (UTC)
Goto Top
Zitat von @Deepsys:
N'Abend,

was mir nicht so ganz einleuchtet: Warum kopierst du die crontab ??

Ich kenne es nur so das man als betreffender User einfach crontab -e ausführt und gut ...
Wenn man keine hat, nimmt crontab eine leere ...

Weil dann Umgebungsvariablen schon gesetzt werden können, so wie der Systemadmin es vorgesehen haben könnte? Und solange die Benutzer es dann nicht löschen..

VG
Deepsys

PS: Ich würde nie ein Linux-Script test.sh nennen, es gibt ein bashprogramm namens test (allerdings ohne .sh)und wenn du da
beim Aufruf durcheinander kommst ....

ich nenne sie immer rm-rf-/.sh da ist bisher noch nie was passiert face-smile

Lg
Matze
Member: Deepsys
Deepsys Apr 06, 2010 at 20:15:10 (UTC)
Goto Top
> Zitat von @Deepsys:

Weil dann Umgebungsvariablen schon gesetzt werden können, so wie der Systemadmin es vorgesehen haben könnte? Und solange
die Benutzer es dann nicht löschen..

OK, das macht Sinn.


ich nenne sie immer rm-rf-/.sh da ist bisher noch nie was passiert face-smile

Gute Idee, das mache ich nun auch immer face-wink

VG
Deepsys
Member: Fraenky
Fraenky Apr 06, 2010 at 21:32:38 (UTC)
Goto Top
Hallo Matze

Ja, ja, das erste mal.

*/1 wars. Danke für die Aufmerksamkeit.

@ Deepsys

Ich hatte das Script hier umbenannt. Aber Danke für den Hinweis.


Gruß

Fraenky