Hi!
Habe ein Problem mit crontab.
Ich habe als normaler User einen Cronjob angelegt.
Er sollte jeden morgen um 11.20 laufen.
crontab -e
dann
20 11 * * * /usr/local/myprogram/myprogam.sh
wenn ich unter root unter Kommanozeile aufrufe, klappt alles prima.
Es liegt nicht am Script.
Der automatische Cronjob klappt jedoch nicht.
Die Rechte für myprogram.sh habe ich mit chmod 755 gändert.
Ich bin neu in der Linuxwelt. Habe ich vielleicht etwas vergessen?
Googeln hat auch nicht weitergeholfen...
Danke im voraus!
crontab läuft nicht
@chlor: Unwahrscheinlich. Die Notation mit der Userkennung zwischen den 5 Zeitangaben und dem Kommando wird nur in der /etc/crontab bzw. unter /etc/cron.d/* verwendet. Wenn man einfach mittels eine crontab-Datei erstellt, wird sie unter /var/spool/cron/crontabs unter dem Namen des anlegenden Users gespeichert (distributionsabhängig). Damit ist das User-Feld unnötig; es ist eigentlich auch nur eine Erweiterung, die man bei anderen crond-Implementierungen nicht unbedingt findet.
Wenn man sich als root (oder beliebiger anderer User) am System anmeldet, durchläuft die Shell des Users ja verschiedene Dateien, die dem User eine angenehme Arbeitsumgebung einrichten sollen. Dazu gehört auch, dass die PATH-Variable ergänzt wird, damit alle notwendigen Programme schnell und unkompliziert aufgerufen werden können. Insbesondere wird bei root auch /sbin und /usr/sbin mit in den Suchpfad aufgenommen.
Als Lösung bieten sich zwei Möglichkeiten an:
Jochen
Code: Select all
crontab -e
Wenn man sich als root (oder beliebiger anderer User) am System anmeldet, durchläuft die Shell des Users ja verschiedene Dateien, die dem User eine angenehme Arbeitsumgebung einrichten sollen. Dazu gehört auch, dass die PATH-Variable ergänzt wird, damit alle notwendigen Programme schnell und unkompliziert aufgerufen werden können. Insbesondere wird bei root auch /sbin und /usr/sbin mit in den Suchpfad aufgenommen.
Als Lösung bieten sich zwei Möglichkeiten an:
- Entweder die Kommandos (wenn es nur wenige sind) mit absoluten Pfadnamen aufrufen (also statt lieber
Code: Select all
lsof
schreibenCode: Select all
/usr/sbin/lsof
- oder aber wenn das Skript länger ist oder noch andere Umgebungsvariablen gesetzt werden müssen, diese im Skript selbst auf die nötigen Werte setzen:
Code: Select all
PATH=$PATH:/sbin:/usr/sbin lsof
Jochen
Die grösste Lüge der EDV? "Mal eben..."