PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cronjob kann ImageMagick nicht ausführen



auto01
17.12.08, 15:22
Hallo!

Ich habe folgenden Cronjob mit "crontab -e" eingerichtet.

52 12 * * * /usr/bin/convert -colorspace RGB -density 300x300 -quality 100 /srv/www/htdocs/Test/1217_HP_28.pdf /srv/www/htdocs/Test/1217_HP_28.jpg >> /home/meinuser/scripts/log/Test.log

Um 12:52 wurde die Logdatei /home/meinuser/scripts/log/Test.log angelegt. Die ist aber leer. Das Bild /srv/www/htdocs/Test/1217_HP_28.jpg wurde aber nicht generiert.
Wenn ich den Befehl als gleicher User per Hand ausführe:
/usr/bin/convert -colorspace RGB -density 300x300 -quality 100 /srv/www/htdocs/Test/1217_HP_28.pdf /srv/www/htdocs/Test/1217_HP_28.jpg >> /home/meinuser/scripts/log/Test.log
wird das Bild /srv/www/htdocs/Test/1217_HP_28.jpg generiert.

Warum kann der Cronjob ImageMagick nicht ausführen?
Ich kann ansonsten alles andere per Cronjob ausführen. Egal ob Shellscript oder auch PHP-Script. Nur alles was mit ImageMagick zu tun hat geht nicht.
Noch mal als Hinweis: Ich will aus einem PDF ein JPG machen.

OS ist SUSE Linux Enterprise Server 10 SP2 (x86_64)

derRichard
17.12.08, 21:22
hi!

hat cron die rechte dazu?
was steht in den logs?

hth,
//richard

auto01
18.12.08, 06:59
hi!

hat cron die rechte dazu?
was steht in den logs?

hth,
//richard
Hallo! Das war natürlich auch mein erster Gedanke. Sowohl das IM Programm convert als auch die zu bearbeitenden PDF's und der Ordner in dem das PDF liegt haben 777 Rechte. Außerdem wurde der Cronjob mit dem User angelegt, mit dem man den Befehl auch ausführen kann.
Ich bin der Meinung, dass der Cronjob die gleichen Rechte hat wie derjenige, der ihn mit "crontab -e" angelegt hat. Die Logdateien werden zwar angelegt, sind aber leer.
Könnte es denn sein, dass ein Cronjob spezielle Rechte hat, die vom Besitzer abweichen? Wenn ja, wie kann man das prüfen bzw. ändern?

Gruß auto01

marce
18.12.08, 07:52
die Umgebung von cron ist eine andere wie die des Users - da könnte eine Ursache drin liegen - ich weiß leider nicht, was convert alles macht, wenn es darum geht, ein PDF zu erstellen (z.B. Aufrufe von ext. Programmen über $PATH, ...)

Du kannst ja mal versuchen, die Cron-Umgebung möglichst exakt der Login-Umgebung anzupassen (set, env entsprechend im Script einstellen, ...)

Poste trotz allem aber mal die betreffenden Rechte, evtl. kann man den Loglevel noch hochdrehen und auch stderr / stdout ded. abfangen und umleiten - evtl. gibt's auch eine Mail von Cron an den User oder einen Eintrag im Systemlog?

auto01
18.12.08, 08:15
die Umgebung von cron ist eine andere wie die des Users - da könnte eine Ursache drin liegen - ich weiß leider nicht, was convert alles macht, wenn es darum geht, ein PDF zu erstellen (z.B. Aufrufe von ext. Programmen über $PATH, ...)

Du kannst ja mal versuchen, die Cron-Umgebung möglichst exakt der Login-Umgebung anzupassen (set, env entsprechend im Script einstellen, ...)

Poste trotz allem aber mal die betreffenden Rechte, evtl. kann man den Loglevel noch hochdrehen und auch stderr / stdout ded. abfangen und umleiten - evtl. gibt's auch eine Mail von Cron an den User oder einen Eintrag im Systemlog?
Also als erstes, er soll aus einem PDF ein JPG machen. Dazu führt ImageMagick/Convert Ghostscript (gs) aus. Das war auch meine Vermutung, dass "gs" nicht im "$PATH" für den Cron drin steht.



(set, env entsprechend im Script einstellen, ...)Wie macht man das?
Ich könnte mir vorstellen den Pfad zu "gs" per Script zu $PATH hinzuzufügen, beim Cron-durchlauf.

marce
18.12.08, 08:17
Du kannst den PATH in der Crontab setzen - alternativ ein Wrapper-Script schreiben, welches die Umgebung passend bereit stellt.

Was sagt denn ein
which gs an der Konsole bei Dir?

auto01
18.12.08, 08:19
Du kannst den PATH in der Crontab setzen - alternativ ein Wrapper-Script schreiben, welches die Umgebung passend bereit stellt.OK, danke. Ersteres weiß ich sofort, wie das geht. Letzteres muss ich erst mal herausfinden.

marce
18.12.08, 08:25
OK, danke. Ersteres weiß ich sofort, wie das geht. Letzteres muss ich erst mal herausfinden.
???

crontab:

0 * * * * * /pfad/zum/wrapper.sh
(ich hoffe, ich habe mich bei den Sternchen nicht verzählt :-)

wrapper.sh:

#!/bin/bash
PATH=
SONSTIGE_ENV=
NOCH_EINE_ENV=

/usr/bin/convert ...

Hört sich also hochtrabender an ("wrapper-Script") als es im Endeffekt ist.

"Vorteil" dabei ist, daß Du die Variablen für jeden Cronjob ded. festlegen kannst. Die Crontab-Variante geht auch, ist aber dann für alle Crons gültig, das kann manchmal nicht erwünscht sein...

Als Nebeneffekt ist man mit der Wrapper-Variante meist kompatibler, nicht jeder Cron-Daemon erlaubt alles bzw. die Syntax unterscheidet sich teils. Und das Script tut auch an der Shell auf jeden Fall, egal wie kastriert die ist...

auto01
18.12.08, 15:06
Dadurch das jetzt im Cronjob ein Shellscript aufgerufen wird, welches den "PATH" setzt funktioniert es jetzt.

Vielen Dank für die Hilfe!