• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Crontab macht irgendwie nicht das was erwartet wird.

HansOffenburg

Granny Smith
Registriert
22.09.09
Beiträge
13
Hallo allerseits,

irgendwie komme ich mit einem angelegtem Crontab nicht weiter.

Die Crontab Zeile lautet:

*/15 * * * * /sw/bin/fortune > /Users/username/fortune.txt

Soweit so gut. Führe ich in der bash aus: /sw/bin/fortune > /Users/username/fortune.txt ist alles in butter und fortune erzeut ein Zitat in der angegebenen Datei. Mache ich das ganze jedoch als cronjob dann ist im anschluss die Datei leer.

Hat jemand eine Idee woran das wohl liegen könnte?

Danke und Gruß
Hans
 
Kann es ein, dass der cronjob mit anderem Environment läuft und fortune seine Spruchsammlung nicht findet?

Versuche mal
*/15 * * * * /sw/bin/fortune > /Users/username/fortune.txt 2> fehler.log
 
Kann es ein, dass der cronjob mit anderem Environment läuft und fortune seine Spruchsammlung nicht findet?

Nun wenn Du mir erklärst was du mit Environment meinst, dann kann ich Dir sagen ja oder nein. Also Fortune läuft auf dem gleichen Rechner wie der Cronjob. Wenn ich im terminal eingebe /sw/bin/fortune bekomme ich auch einen Spruch angezeigt.

Fortune wurde mittels Fink installiert, wenn Dir das weiterhilft.

Gruß + Danke
Hans
 
Gib im Terminal mal 'env' ein, dann kriegst du eine Liste von Umgebungsvariablen (environment variables). Die gelten üblicherweise nur für deinen User. Vielleicht steht da auch, wo fortune seine Datei mit den Sprüchen findet.

Wenn der cronjob jetzt nicht in deiner Umgebung läuft, fehlt fortune womöglich diese Variable. Durch Umleitung von STDERR in eine Datei kriegst du das vielleicht raus (http://www.fibel.org/linux/lfo-0.6.0/node111.html).

Alles nur spekulativ, aber vielleicht kann man fortune den Pfad zur Spruchsammlung als Parameter mitgeben.
 
Hallo,

also env sagt folgendes:

MANPATH=/sw/share/man:/opt/local/share/man::/sw/lib/perl5/5.10.0/man:/usr/X11R6/man
TERM_PROGRAM=Apple_Terminal
TERM=xterm-color
SHELL=/bin/bash
TMPDIR=/var/folders/Vk/Vkwvz1nkGM4ofoDSgOXMeU+++TI/-Tmp-/
PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin
Apple_PubSub_Socket_Render=/tmp/launch-4bzatO/Render
TERM_PROGRAM_VERSION=273
OLDPWD=/
USER=username
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-MXXH5e/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:3
PATH=/sw/bin:/sw/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/X11R6/bin
PWD=/fortunes
LANG=de_DE.UTF-8
VERSIONER_PERL_PREFER_32_BIT=yes
SHLVL=1
HOME=/Users/username
LOGNAME=username
INFOPATH=/sw/share/info:/sw/info:/usr/share/info
DISPLAY=/tmp/launch-8S8Kne/org.x:0
_GOOGLE_GILD_RUNTIME_FRAMEWORK_ABSOLUTE_PATH_=/Library/Google/Frameworks/Gild.framework
_=/usr/bin/env

Die Zitate liegen in :

/sw/share/fortunes/de/zitate

könnte natürlich auch machen /sw/bin/fortune /sw/share/fortunes/de/zitate um einen spruch ausgeben zu lassen aus der Datei

Sehe da nur noch nicht den Sinn drin weil fortune ja angewiesen ist automatisch aus dieser Datei die Zitate zu lesen.

Gruß
Hans
 
könnte natürlich auch machen /sw/bin/fortune /sw/share/fortunes/de/zitate um einen spruch ausgeben zu lassen aus der Datei
Hast du das so per cronjob ausprobiert?

Sehe da nur noch nicht den Sinn drin weil fortune ja angewiesen ist automatisch aus dieser Datei die Zitate zu lesen.
Wo wird fortune dazu angewiesen? Vielleicht greift diese Anweisung im cronjob nicht.
 
Hallo,

habe es grade mal ausprobiert, jedoch gleiches Ergebnis.
Die Frage wäre ob man so etwas evtl. auch mit dem Automator machen kann?!
Schon komisch das es auf diesem Weg nicht geht :(

Gruß
Hans
 
Gibt die Umleitung von STDERR ingendeinen Hinweis?

*/15 * * * * /sw/bin/fortune > /Users/username/fortune.txt 2> fehler.log
 
Also habe mal das ganze so gemacht aber fehler.log ist leer somit gehe ich davon aus das kein Fehler aufgetreten ist.
Mache ich das ganze direkt im Terminal steht ein Spruch in der fortune.txt.
Und normal (so kenne ich es halt) wenn ein Befehl in der Bash funktioniert sollte er auch als crontab funktionieren.

Habe auch mal versucht ein Script zu schreiben und dann das script auszuführen über crontab aber genau das gleiche spiel. Rufe ich script.sh in der Bash auf geht es, per Crontab nicht.