Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
knauthe
Beiträge: 198
Registriert: 03.03.2004 16:00:17
Wohnort: Berlin
Kontaktdaten:

Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von knauthe » 07.11.2009 18:40:52

Hallo zusammen,

ganz kleines Skript. Die Logdatei, in welche die Ausgabe läuft sieht so aus bei manuellem Skript Aufruf:

Code: Alles auswählen

CPU Temp: +45.8°C WDC WD3200AAJS-00L7A0: 46°C SAMSUNG HD501LJ: 41°C SAMSUNG HD501LJ: 42°C Sa 7. Nov 18:28:07 CET 2009
und so bei Aufruf aus cron.d

Code: Alles auswählen

CPU Temp: +45.8 C Sat Nov 7 18:30:02 CET 2009
Hier das kleine Skript:

Code: Alles auswählen

#!/bin/sh
CPU=`sensors | grep 'CPU Temp' | cut -d '(' -f 1` # &> /var/log/Temperaturprotokoll.log
HDD=`hddtemp /dev/sda /dev/sdb /dev/sdc | cut -d ':' -f 2-3`
DATE=`date`
echo $CPU $HDD $DATE >> /var/log/Temperaturprotokoll.log 2>&1
Habt Ihr irgendeine Idee, warum hddtemp sich nicht von Cron aufrufen läßt?

Besten Dank für jeden Tip im Voraus, *roq-on

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von 123456 » 07.11.2009 18:46:36

probiers doch mal mit absoluten Pfaden...

Benutzeravatar
knauthe
Beiträge: 198
Registriert: 03.03.2004 16:00:17
Wohnort: Berlin
Kontaktdaten:

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von knauthe » 08.11.2009 10:32:15

Super das war's, vielen Dank.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von Duff » 08.11.2009 10:36:42

Ein einfaches HDDTEMP=$(which hddtemp) könnte schon reichen (die anderen Variablen entsprechend).

Code: Alles auswählen

marge:~# which hddtemp
/usr/sbin/hddtemp

marge:~# HDDTEMP=$(which hddtemp)
marge:~# $HDDTEMP /dev/sda
/dev/sda: WDC WD5000BEVT-22ZAT0: 36°C
Oh, yeah!

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von chrisbra » 08.11.2009 13:53:33

Duff hat geschrieben:Ein einfaches HDDTEMP=$(which hddtemp) könnte schon reichen (die anderen Variablen entsprechend).

Code: Alles auswählen

marge:~# which hddtemp
/usr/sbin/hddtemp

marge:~# HDDTEMP=$(which hddtemp)
marge:~# $HDDTEMP /dev/sda
/dev/sda: WDC WD5000BEVT-22ZAT0: 36°C
Sowas macht man nicht. Und es ist in dieser Situation überhaupt nicht hilfreicht. Wenn /usr/sbin nämlich nicht in deinem Pfad ist, findet es which demzufolge auch nicht, weil which auch nur über $PATH iteriert und nach einem executable mit dem angegebenen Namen sucht:

Code: Alles auswählen

chrisbra t41:~/bin [1043]% which foobar
/home/chrisbra/bin/foobar
chrisbra t41:~/bin [1044]% echo $PATH
/home/chrisbra/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
chrisbra t41:~/bin [1045]% export PATH='/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games'
chrisbra t41:~/bin [1046]% which foobar
foobar not found
zsh: exit 1
Also immer direkt den Pfad angeben.
Meine Whishlist
:wq!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von Duff » 09.11.2009 07:52:15

chrisbra hat geschrieben:Wenn /usr/sbin nämlich nicht in deinem Pfad ist, findet es which demzufolge auch nicht, weil which auch nur über $PATH iteriert und nach einem executable mit dem angegebenen Namen sucht:
Ok, da hast du natürlich recht. Dann könnte man auch den kompletten Pfad angeben.
Um dies aber in einem Skript nicht immer wiederholen zu müssen, kann man den kompletten Pfad (oder gg. per which) in einer Variablen speichern.
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Skript läuft bei manuellem Aufruf, bei Cron nur die Hälfte

Beitrag von Meillo » 09.11.2009 08:55:09

Duff hat geschrieben:
chrisbra hat geschrieben:Wenn /usr/sbin nämlich nicht in deinem Pfad ist, findet es which demzufolge auch nicht, weil which auch nur über $PATH iteriert und nach einem executable mit dem angegebenen Namen sucht:
Ok, da hast du natürlich recht. Dann könnte man auch den kompletten Pfad angeben.
Um dies aber in einem Skript nicht immer wiederholen zu müssen, kann man den kompletten Pfad (oder gg. per which) in einer Variablen speichern.
Nein, das geht eben nicht! Denn wenn das Programm im Pfad wäre, dann brauche ich kein which, und wenn es nicht drin ist, dann findet es which nicht. Du kannst natürlich den absoluten Pfad in eine Variable speichern, aber *nicht* mit which.

Wenns mal sehr viele Programme aus einem besonderen Pfad hat, dann setze PATH am Anfang des Scripts geeignet. (Dann brauchst du aber kein which. Überhaupt brauchst du which nur um den Pfad zu *erfahren*, nicht um eine Datei auszuführen. Oder um zu prüfen ob ein Programm vorhanden und im Suchpfad ist.)
Use ed once in a while!

Antworten