PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cron mag script mit top nicht



Rogdab
12-02-2008, 16:46
Moin,

ich hab mir ein script gebaut das eine mail schikct sollte der load zu hoch werden. wenn ich es in der bash starte funktioniert es wunderbar.
sobald ich es cron übergebe hagelt es fehlermeldungen.
Wie kann ich cron beibringen die richtige umgebung einzurichten?
Das andere ist der test auf die bedingung, so richtig mag er die auch nicht.



#!/bin/bash
# checks if the load gets critical
TERM=linux
#export TERM

ADMIN_EMAIL="root"
SERVER_NAME[1]="host1"
SERVER_IP[1]=
DATUM=`date`


LOAD_1=`top -n 1 | awk -F, '/load/{sub(/%.*/,"",$4);print $4}'|sed 's/ load average\://'|sed 's/ //'`
LOAD_2=`top -n 1 | awk -F, '/load/{sub(/%.*/,"",$4);print $5}'|sed 's/ load average\://'|sed 's/ //'`
LOAD_3=`top -n 1 | awk -F, '/load/{sub(/%.*/,"",$4);print $6}'|sed 's/ load average\://'|awk '{print substr($0,0,5)}'|sed 's/ //'`


test1=$(echo "${LOAD_1} > 2.0" | bc -l)
test2=$(echo "${LOAD_2} > 2.0" | bc -l)
test3=$(echo "${LOAD_3} > 2.0" | bc -l)

echo $test1
echo $test2
echo $test3

if [ "$test1" -gt 0 ] || [ "$test2" -gt 0 ] || [ "$test3" -gt 0 ]
then
echo -e "load on ${SERVER_NAME[1]} is getting high
\naverage loads are at "$LOAD_1" "$LOAD_2" "$LOAD_3"
\nDate: ${DATUM}" | mail -s "load on host1 is getting high" $ADMIN_EMAIL
fi

exit 0





TERM environment variable not set.
TERM environment variable not set.
TERM environment variable not set.
(standard_in) 1: parse error
(standard_in) 1: parse error
(standard_in) 1: parse error

/server/scripts/check_load.sh: line 25: [: : integer expression expected
/server/scripts/check_load.sh/check_load.sh: line 25: [: : integer expression expected
/server/scripts/check_load.sh/check_load.sh: line 25: [: : integer expression expected


vielen Dank

EDIT: hab das ganze mal mit cat /proc/loadavg angefangen sollte die top fehler beheben

jan61
12-02-2008, 18:36
Moin,


..ich hab mir ein script gebaut das eine mail schikct sollte der load zu hoch werden. wenn ich es in der bash starte funktioniert es wunderbar.
sobald ich es cron übergebe hagelt es fehlermeldungen.
Wie kann ich cron beibringen die richtige umgebung einzurichten?...

gar nicht ;-) - Du kannst natürlich eine TERM-Variable setzen, aber Du hast immer noch kein TTY - woher soll ein per cron gestartetes Kommando das auch kriegen?

Versuche es mal mit der -b-Option des top (siehe man top, da ist das wie üblich erklärt). Und Du musst immer beachten, dass cron-Jobs nicht die normale Umgebung des Users haben, im Zweifelsfall setzt Du lieber die Umgebungsvariablen im Script selbst (export TERM=vt220) oder liest eine entspr. Konfig-Datei ein.

Jan