Wer kann mir bei Shellscript helfen

Bash, Shell, PHP, Python, Perl, CGI
greenrover
Posts: 203
Joined: 2004-12-17 19:34

Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-25 20:26

Code: Select all

rload="$($_CMD uptime |awk -F'average:' '{ print $2}')"
x="$(echo $rload | sed s/,//g | awk '{ print $2}')"


if [ "$2" == "" ] ;then
 MaxLoad="15";
else
 MaxLoad="$2";
fi

if [ "$x" < "$MaxLoad" ]
 then echo "$1";
 else echo "";
fi
man soll das scrip mit folgendne parametern füttern können:

_exec "/usr/sbin/php -f /test.php" 4

das heist, das das script

/usr/sbin/php -f /test.php

ausführt wenn der systme load kleiner 4 ist.

Stimmt mein Ansatz so???

djholliday
Posts: 26
Joined: 2004-11-23 16:18
Location: Nürnberg

Re: Wer kann mir bei Shellscript helfen

Post by djholliday » 2006-01-26 08:30

Du testest hier zwei Zeichenketten.

Versuch doch mal folgendes

Code: Select all

load=$(uptime | sed -e 's/^.*: ([0-9.]+), ([0-9.]+), ([0-9.]+).*$/3/');
load_int=$(echo $load | sed -e 's/^([0-9]+).*/1/');
[[ $load_int -lt $2 ]]
...
Ansonsten würde ich mir mal diese Seiten genauer durchlesen.

Gruss,
DJ

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 10:25

also das $x für den aktuellen Load wird akorat ermittelt (der 5min load)

Aber wenn der 2te parameter nicht übergeben wird dann soll der MaxLoad bei dem das script noch ausgeführt sein den defaultwert 15 haben und dann halt der erste parameter ausgeführt werden wenn der mom load kleiner ist als der maxload.

und das hast du ja garnicht in deinem script drinn.

Das ganze will ich dann vor jeden cronjop hängen.

Ich hoffe es ist verständlich ?!

djholliday
Posts: 26
Joined: 2004-11-23 16:18
Location: Nürnberg

Re: Wer kann mir bei Shellscript helfen

Post by djholliday » 2006-01-26 11:04

Ich wollte auch kein fertiges Script liefern, sondern nur eine kleine Hilfestellung :-D

Natürlich kannst du mit

Code: Select all

if [ "$2" = "" ] ... 
testen, ob der Parameter überhaupt übergeben wurde.

$# z.B. gibt dir die Anzahl der übergebenen Parameter zurück.
Du könntest daher auch die Mindestanzahl an Parametern überprüfen.
Schau dir doch einfach mal dein Link an, den ich schon vorher gepostet habe.
Speziell den hier

http://www.tldp.org/LDP/abs/html/othertypesv.html

Gruss,
DJ

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 11:13

aber die hauptfrage ist ob das so überhaupt gehen kann:

also wenn ich so die paranmeter übergebe?


_exec "/usr/sbin/php -f /test.php" 4

und wenn ja ob ich dann auf die richtigen variabelen zugreife??

edit:

mein neuer versuch:

Code: Select all

rload="$($_CMD uptime |awk -F'average:' '{ print $2}')"
x="$(echo $rload | sed s/,//g | awk '{ print $2}')"


if [ -n "$2" ] ;then
 MaxLoad="15";
else
 MaxLoad="$2";
fi

if [ "$x" < "$MaxLoad" ]
 then eval "$1"
 else echo ""
fi

da sagt er mri als fehlermeldung imemr nur:

/test df 5
/test: line 11: 15: No such file or directory


wiso ???

djholliday
Posts: 26
Joined: 2004-11-23 16:18
Location: Nürnberg

Re: Wer kann mir bei Shellscript helfen

Post by djholliday » 2006-01-26 11:40

Versuchs doch mal so

Code: Select all

#!/bin/sh
load=$(uptime | sed -e 's/^.*: ([0-9.]+), ([0-9.]+), ([0-9.]+).*$/3/');
load_int=$(echo $load | sed -e 's/^([0-9]+).*/1/');

if [ -z $2 ]
then
        MaxLoad=15;
else
        MaxLoad=$2;
fi

if [ $load_int -lt $MaxLoad ]
then
        eval "$1";
else
        echo "funzt net";
fi
DJ

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 11:43

danke vielmals, es geht!!!!

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 12:27

Ich habe doch noch eine frage...

Code: Select all

#!/bin/sh
load=$(uptime | sed -e 's/^.*: ([0-9.]+), ([0-9.]+), ([0-9.]+).*$/3/');
load_int=$(echo $load | sed -e 's/^([0-9]+).*/1/');


if [ -z $2 ]
then
        MaxLoad=15;
else
        MaxLoad=$2;
fi

if [ $load_int -lt $MaxLoad ]
then
        eval "$1";
else
        eval "echo "Load ist: $load_int n Maxload ist: $MaxLoad nn $1" | mail -s"CRON durch zu hohen Load ausgesetzt" *********";
fi
wiso werden die n in der mail nicht umgesetzt sondern gedruckt ???

Und kann man die Loadüberprüfung auch dne datentpe float geben oder geht nur int???

djholliday
Posts: 26
Joined: 2004-11-23 16:18
Location: Nürnberg

Re: Wer kann mir bei Shellscript helfen

Post by djholliday » 2006-01-26 13:36

Float geht AFAIK nicht.
n werde auch als solche ausgegeben, du kannst sie aber durch einfache <Zeilenumbrüche> ersetzen

echo "Dies ist
ein sehr
langer Text"

DJ

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 13:43

also das

Code: Select all

rload="$($_CMD uptime |awk -F'average:' '{ print $2}')"
x="$(echo $rload | sed s/,//g | awk '{ print $2}')" 
holt es ja als float wert aber lässt sich das dann nicht vergleichen oder wo liegt das problem?

djholliday
Posts: 26
Joined: 2004-11-23 16:18
Location: Nürnberg

Re: Wer kann mir bei Shellscript helfen

Post by djholliday » 2006-01-26 13:51

Genau, du bekommst hier einen Float-Wert, der sich aber nur als Zeichenkette vergleichen lässt.
Du kannst auch "man test" aufrufen, da stehen alle vergleiche drin die möglich sind.

DJ

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 13:59

es geht doch..

Code: Select all

y="$(echo "$x >= $LOAD_WARN" | bc)"
if [ "$y" == "1" ]

bc steht für basic calculator ...

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Wer kann mir bei Shellscript helfen

Post by Joe User » 2006-01-26 15:15

GreenRover wrote:wiso werden die n in der mail nicht umgesetzt sondern gedruckt ???
s/echo/echo -e/
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

greenrover
Posts: 203
Joined: 2004-12-17 19:34

Re: Wer kann mir bei Shellscript helfen

Post by greenrover » 2006-01-26 15:27

@ joe was soll mri das jetzt sagen?? Ich habe eider kein chimmer wohin damit.

lord_pinhead
Posts: 774
Joined: 2004-04-26 15:57

Re: Wer kann mir bei Shellscript helfen

Post by lord_pinhead » 2006-01-28 09:56

Er meinte das du deine echo befehl um die option e erweitern sollst, also aus echo wird echo -e , dann werden auch die Escape Sequenzen verarbeitet.

Warum das ganze nicht per mail rausgeht? Entweder bin ich blind, oder es fehlt der Mailbefehl :)

Code: Select all

echo -e "schöner text, load, irgendwas" | 
mail -s "Load `date | cut -d" " -f 3,2,6`" 
hans@wurst.de
dann sollte auch ne Mail kommen. Oder meintest du den Befehl MAILTO: in der Crontab?

Edit: hab mit cut noch das Datum in den Betreff.

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Wer kann mir bei Shellscript helfen

Post by isotopp » 2006-01-28 11:52

Code: Select all

mail -s "Load `date | cut -d" " -f 3,2,6`" 
hans@wurst.de
Au. Au. Au.

Code: Select all

date --help

Code: Select all

h743107:~ # date +"%Y-%m-%d"
2006-01-28
Danke.

Der andere Fehler ist übrigens,

Code: Select all

date -d "yesterday"; date -d "now + 1 month"
nicht zu kennen (wenn man z.B. Backup-Files oder Logrotates oder so was bauen will. Meinjanur.

lord_pinhead
Posts: 774
Joined: 2004-04-26 15:57

Re: Wer kann mir bei Shellscript helfen

Post by lord_pinhead » 2006-01-29 08:08

Ok, so gehts auch :) War halt eine fixe lösung :)