Crontab und Scripts - Problem

U

UwBeInter

Jungspund
Hallo Zusammen

Ich habe ein Script welches mittels Cronjob ausgeführt werden soll.
Gemäss Log wird es auch ausgeführt, jedoch passiert nichts:

Jul 5 09:49:01 srv CRON[24156]: (root) CMD (/var/www/vhosts/uwbeinternational.ch/weather_reports/videos/chk_new_files_vid.sh)
Jul 5 09:49:01 srv CRON[24157]: (root) CMD (/var/www/vhosts/uwbeinternational.ch/weather_reports/images/chk_new_files_img.sh)

Die crontab sieht folgendermassen aus:
Code:
30 * * * * /var/www/vhosts/uwbeinternational.ch/weather_reports/images/chk_new_files_img.sh
30 * * * * /var/www/vhosts/uwbeinternational.ch/weather_reports/videos/chk_new_files_vid.sh

Ich weiss dass Script für Cronjobs absolute Pfade haben müssen. Normal funktioniert es einwandfrei aber via Cron nicht. Also habe ich die Pfade angepasst und das Script sieht nun so aus:

Code:
#!/bin/bash
var=0
for /usr/bin/file in ${dir}/weather_reports/images/*
do
        [[ "$file" =~ handled_img.dat ]] && continue
        if /bin/grep -w "$file" "${dir}/handled_img.dat" > /dev/null 2> /dev/null
        then
                continue
        fi
        var=`expr $var + 1`
        /usr/bin/printf "%s\n" "$file" | /usr/bin/tee -a "${dir}/handled_img.dat"
done
if [ $var -gt 1 -o $var -eq 1 ] ;
then
    /usr/bin/mailx -a "From: UwBe International <info@mail.tld>" -s "Neue Bilder auf dem FTP vorhanden" info@mail.tld < "mail_info.txt"
fi

Doch es passiert leider gar nichts.
Ohne diese Pfade /usr/bin vorne dran und wenn ich dann so das Script manuell mit ./ ausführe, funktioniert alles einwandfrei. Nur via Cronjob geht es nicht. Und das Script ist mit chmod +x ausführbar gemacht worden.

Hat jemand einen Idee was ich übersehen haben könnte?
 
Code:
for /usr/bin/file in
ist garantiert falsch.

... Du willst da ja eine Variable belegen...

Weitere Fehlermeldungen dürftest Du vermutlich per Mail an den lokalen root-Account erhalten.
 
Weitere Fehlermeldungen dürftest Du vermutlich per Mail an den lokalen root-Account erhalten.

Wurde nie eingerichtet oder angepasst. Daher hab ich jetzt die normale Log am Cron angehängt.Folgendes schreibt der nun rein:

/bin/sh: 1: /var/www/vhosts/uwbeinternational.ch/weather_reports/images/chk_new_files_img.sh: not found

ich frage mich nur warum findet der das nicht? es ist doch ein absoluter Pfad?
Habe es auch mit /bin/bash und /bin/bash --login root etc. versucht ohne Erfolg
 
Zuletzt bearbeitet:
Ein Windowszeichen? Auch wenn ich diret in der Shell mit dem Nano-Editor die Skripte schreibe? Ansonsten arbeite ich auf einem Mac und nicht Win, aber ich schaue da gerne mal nach. Stackoverflow kenn ich da wurde ich auch schon mehrmals fündig, auch wenn es manchmal nur an minimalsten kleinsten Dingen lag. :) ^^

Habe dos2unix drüberlaufen lassen und den Cronjob erneut ausgeführt.
Immer noch dieselbe Meldung dass die Datei nicht gefunden wurde.
 
Zuletzt bearbeitet:
Also ich habe nun alles mögliche versucht. Von cd, root, /bin/bash -l -c ./ etc... über cd /var/www/...; bash ./chk_new_files.sh aber nichts davon will funktionieren. Ich erhalte in der Log immer nur "File not found".

Ich habe nun gelesen dass crontab -e immer von /root/ aus geht. Dann wäre der Pfad also /root/var ... logisch findet er nicht, weil der normale Pfad von Root also vom ~ her kommend cd / und danach /var ... ist ..

Wie teile ich das nun im crontab mit damit der auch das Script findet??
 
der Pfad sollte schon passen.

Die Fehlermeldung kenne ich wie gesagt hauptsächlich dann, wenn der Shebang fehlerhaft ist.

Aber poste doch mal
Code:
crontab -l
ls -la /var/www/vhosts/uwbeinternational.ch/weather_reports/images/chk_new_files_img.sh
file /var/www/vhosts/uwbeinternational.ch/weather_reports/images/chk_new_files_img.sh
 
Hi,

ich nehme an, du hast die "for"-Schleife inzwischen korrigiert, wie marce oben angedeutet hat. Die Fehlermeldung, die du oben gezeigt hast, enthält eine Zeilennummer - demnach wird das Skript gefunden und ausgeführt - sonst würde ich eine Meldung wie ".../check_new_files_img.sh: No such file or directory" erwarten. Die Fehlermeldung "File not found" kommt wohl daher, dass du eine Variable "${dir}" verwendest, die im Skript aber nicht gesetzt wird und in der cron-Environment nicht bekannt ist, in deiner Login-Shell beim interaktiven Aufruf aber bekannt sein dürfte.

Nur als Ergänzung: ich stimme zu, es ist sicher empfehlenswert, bei der Definition von cron-Jobs den kompletten Pfad der auszuführenden Kommandos anzugeben. Innerhalb der Skripten, die aus cron laufen sollen, kannst du aber besser einfach am Anfang den PATH setzen
Code:
PATH=/usr/bin:/bin export PATH
und dir dann die ganzen Kunststückchen sparen ...

Gruss, A.
 
Danke für Eure Inputs.
Aber: Mann mann mann bin ich doof!!! ich setze mich wohl nie mehr hinter den PC wenn ich müde bin !!
Schreibfehler! Es fehlt ganz klar ein httpdocs/ nach dem uwbeinternatioal.ch .. logisch findet der das script nicht!

OMG... nun funzt es...
 
Jedem schon passiert :)

Eine kleine Anmerkung noch am Rande, ich würde solche Skripte nicht in Verzeichnisse packen die vom Webserver ausgeliefert werden oder in die irgend ein Upload schreiben kann.

mfg
HeadCrash
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

[gelöst] - for file in ... nur für bestimmte Endungen?

nginx owncloud, php? Problem

Queue für copy Script

Apache /var/www zu /home/ich/www wechseln

Zurück
Oben