[CentOS-de] Bash-Frage

Alexander Dalloz ad+lists at uni-x.org
Sa Jan 28 10:37:24 EST 2012


Am 28.01.2012 16:14, schrieb Wolfgang:
> Hallo CentOS-Freunde,
> 
> 
> mein Problem hat bestimmt nichts mit CentOS zutun, aber Fragen kann
> man ja, oder?
> 
> 
> Nachstehend ist eine sehr einfache bash, die bei manueller Ausführung
> wunderbar funktioniert, aber im cronjob werden nur die Temperaturen
> der Festplatten angezeigt.
> 
> 
> [root@ ~]# crontab -l
> */5 * * * * /usr/local/sbin/temperatur
> oder
> */5 * * * * root /usr/local/sbin/temperatur

Diese Zeile ist schlichtweg falsch. In eine User crontab gehört keine
User Spalte.

> zeigen das gleiche Ergebnis.
> 
> 
> 
> 
> 
> 
> #!/bin/bash
> 
> # Sinn dieser Bash:
> # einfacher Temp-Überblick
> 
> # 2.6.18-274.12.1.el5 #1 SMP Tue Nov 29 13:37:46 EST 2011 x86_64 x86_64
> x86_64 GNU/Linux
> # sensors
> # k10temp-pci-00c3
> # Adapter: PCI adapter
> # temp1:       +38°C
> 
> DB_Name=/var/www/html/Ralf/rrd/`basename "$0" .sh`.rrd
> Grafik=/var/www/html/Ralf/rrd/`basename "$0" .sh`.png
> 
> if [ ! -f $DB_Name ]; then
> /usr/bin/rrdtool create $DB_Name --step 300 \
> DS:TEMP_CPU:GAUGE:600:U:U \
> DS:TEMP_SDA:GAUGE:600:U:U \
> DS:TEMP_SDD:GAUGE:600:U:U \
> RRA:AVERAGE:0.5:1:2160 \
> RRA:AVERAGE:0.5:5:2016 \
> RRA:AVERAGE:0.5:15:2880 \
> RRA:AVERAGE:0.5:60:8760
> fi
> 
> 
> 
> 
> 
> # Um diese Zeile dreht sich mein Problem:
> TEMP_CPU=$(sensors | tail -n2 | cut -d'+' -f2 | \
> cut -d'C' -f1 | cut -d'°' -f1)

Hatte ich glaube ich schon mal als fürchterliche chain of pipes kritisiert.

> TEMP_SDA=$(hddtemp -n /dev/sdc)
> TEMP_SDD=$(hddtemp -n /dev/sdd)
> 
> /usr/bin/rrdtool update $DB_Name N:$TEMP_CPU:$TEMP_SDA:$TEMP_SDD

Warum hier den absoluten Pfad zu rrdtool ...

> nice -n 19 rrdtool graph $Grafik \

und hier dann ohne Pfadangabe?

> -a PNG \
> -t "Temperatur in °C  $HOSTNAME" \
> -v "`date +%d.%m.%Y-%H:%M`" \
> --zoom 2 \
> DEF:TEMP_CPU=$DB_Name:TEMP_CPU:AVERAGE \
> DEF:TEMP_SDA=$DB_Name:TEMP_SDA:AVERAGE \
> DEF:TEMP_SDD=$DB_Name:TEMP_SDD:AVERAGE \
> LINE1:TEMP_CPU#FF0000:"CPU = $TEMP_CPU" \
> LINE1:TEMP_SDA#00FF00:"SDC = $TEMP_SDA" \
> LINE1:TEMP_SDD#0000FF:"SDD = $TEMP_SDD" \
>> /dev/null

Die Umgebung von cron ist recht rudimentär. Insbesondere ist $PATH
eingeschränkt. Nutze absolute Pfade oder erweitere $PATH am Beginn des
Scriptes.

Alexander