[Linux] Bash scripting hulp

Pagina: 1
Acties:

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 15-01 10:55
Ik heb een simpel PHP scriptje geschreven om temperaturen van een machine te kunnen uitlezen. Met SNMP kon ik zo snel niet vinden wat voor addon ik daarvoor nodig had (ik draai net-snmp).

Vandaar het volgende PHP script:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
$servernummer=$_SERVER['argv'][1];
if ($servernummer == "192.168.2.1"){
    exec ("/servers/temps", $huidige_status_output);
} else {
    exec ("sudo -b -u USERNAME ssh -p XXXX -i /home/XXXXX/.ssh/id_dsa gameservers@$servernummer /servers/temps", $huidige_status_output);
}
echo "$huidige_status_output[0]\n";
echo "$huidige_status_output[1]\n";
?>


Het is alleen een erg langzaam script, met moet natuurlijk ook allemaal door PHP heen, eigenlijk nergens voor nodig voor zoiets simpels als dit. Wil iemand mij helpen met de juiste bash code?

Het eerste stukje zal er ongeveer zo uitzien:
code:
1
2
3
4
5
6
7
SERVERNUMMER=$1
if test "$1" = "192.168.2.1"
then
/servers/temps
else
sudo -b -u USERNAME ssh -p XXXX -i /home/XXXXX/.ssh/id_dsa gameservers@$servernummer /servers/temps
fi

Verder kom ik niet, hoe krijg ik de output er handig uit? Het komt terug op 2 lijnen. Bedankt alvast!

Ondernemer in tech (oud LOQED.com, nu UpToMore.com)


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Heb je een voorbeeldje van hoe je output er nu uitziet?

Owja dit:
PHP:
1
echo "$huidige_status_output[0]\n";

gaat niet werken. Vervang dit eens door
PHP:
1
echo $huidige_status_output[0]."\n";


Ik heb zelf een aantal scripts ook met PHP geschreven voor system-tasks maar ik heb nou niet echt het idee dat het zoveel langzamer is.

Nu met Land Rover Series 3 en Defender 90


  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 11-02 20:53

Kippenijzer

McFallafel, nu met paardevlees

Ik neem aan dat je script met het "sensors" commando van het lm_sensors package werkt?
Vooral sensors zelf is redelijk traag, ik denk dat de overhead voor php te verwaarlozen is.

offtopic:
Ow jah, ik heb het druk gehad, spreek je vanavond wel even aan :+

  • GieltjE
  • Registratie: December 2003
  • Laatst online: 16-02 17:11

GieltjE

Niks te zien...

al eens aan phpsysinfo gedacht?

Hell / 0


  • [BoSS]
  • Registratie: Maart 2000
  • Laatst online: 03:15

[BoSS]

Geen woorden maar daden!

Als je hulp nodig hebt met BASH-scripting, is de volgende link erg aan te raden:
Advanced Bash Scripting Guide

20x 170 Wp (Solar Frontier) op ZZO / 54 graden


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 21:31

Kees

Serveradmin / BOFH / DoC
overhead van php op zoiets is te verwaarlozen, maar het kan natuurlijk makkelijker ;)

Je kan het ook makkelijker doen, maak met xinetd of inetd (maar dat is minder secure, moet je weer tcpwrappers gebruiken) een service aan die '/servers/temp' uitvoert. dat scheelt je een boel overhead op ssh e.d.
je kan het dan gewoon uitlezen met 'telnet server poort'

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

MTWZZ schreef op 01 oktober 2004 @ 10:25:
Heb je een voorbeeldje van hoe je output er nu uitziet?

Owja dit:
PHP:
1
echo "$huidige_status_output[0]\n";

gaat niet werken. Vervang dit eens door
PHP:
1
echo $huidige_status_output[0]."\n";
Dat is niet waar, al zou ik de tweede manier prefereren.

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

pierre-oord schreef op 01 oktober 2004 @ 10:20:
[..]
Verder kom ik niet, hoe krijg ik de output er handig uit? Het komt terug op 2 lijnen. Bedankt alvast!
Bedoel je dat je alleen de eerste twee regels van de output wilt zien?
In dat geval kan je gewoon het filter head gebruiken:


code:
1
2
3
4
5
6
7
SERVERNUMMER=$1
if test "$1" = "192.168.2.1"
then
/servers/temps
else
sudo -b -u USERNAME ssh -p XXXX -i /home/XXXXX/.ssh/id_dsa gameservers@$servernummer /servers/temps
fi | head -n 2

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)


  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 15-01 10:55
Nog bedankt voor de hulp, sorry ik had het erg druk om te reageren.
Ik wil niet alleen 2 regels zien, maar m'n script laat er maar 2 zien, als je anders met php al je regels wilt laten zien moet je met een for lus gaan werken dacht ik.
Schijnbaar ligt het toch niet aan PHP (weinig overhead zeggen jullie) maar aan de sensors zelf. Nou, wat ook veel tijd kost is het opzetten van een (veilige) SSH sessie geloof ik.

De output is overigens iets in de richting van:
case: 20
cpu: 40

Dat uitlezen met telnet klinkt wel leuk, maar heb ik nog nooit gedaan en ben bang dat ik straks een veiligsheids lek krijg (alhoewel ik alleen de interne IP range zou toelaten tot deze poort dan via iptables).

Verder, het sensors script is nog redelijk snel, vooral SSH is langzaam volgens mij. Als ik dat eens via telnet kan doen is leuk. Wel denk ik aan mogelijk een cronjob voor sensors, zodat om de zoveel tijd een file wordt weggescreven. Dat kan wel weer tijd schelen denk ik.

Ondernemer in tech (oud LOQED.com, nu UpToMore.com)


  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
###############################################################################
# Executables/scripts
#

#
#  You can also have programs run by the agent that return a single
#  line of output and an exit code.  Here are two examples.
#
#  exec NAME PROGRAM [ARGS ...]
#
#  NAME:     A generic name.
#  PROGRAM:  The program to run.  Include the path!
#  ARGS:     optional arguments to be passed to the program

# a simple hello world

#exec echotest /bin/echo hello world

# Run a shell script containing:
#
# #!/bin/sh
# echo hello world
# echo hi there
# exit 35
#
# Note:  this has been specifically commented out to prevent
# accidental security holes due to someone else on your system writing
# a /tmp/shtest before you do.  Uncomment to use it.
#
#exec shelltest /bin/sh /tmp/shtest

# Then,
# % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.8
# enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1
# enterprises.ucdavis.extTable.extEntry.extIndex.2 = 2
# enterprises.ucdavis.extTable.extEntry.extNames.1 = "echotest"
# enterprises.ucdavis.extTable.extEntry.extNames.2 = "shelltest"
# enterprises.ucdavis.extTable.extEntry.extCommand.1 = "/bin/echo hello world"
# enterprises.ucdavis.extTable.extEntry.extCommand.2 = "/bin/sh /tmp/shtest"
# enterprises.ucdavis.extTable.extEntry.extResult.1 = 0
# enterprises.ucdavis.extTable.extEntry.extResult.2 = 35
# enterprises.ucdavis.extTable.extEntry.extOutput.1 = "hello world."
# enterprises.ucdavis.extTable.extEntry.extOutput.2 = "hello world."
# enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0
# enterprises.ucdavis.extTable.extEntry.extErrFix.2 = 0

# Note that the second line of the /tmp/shtest shell script is cut
# off.  Also note that the exit status of 35 was returned.

# -----------------------------------------------------------------------------


rechtstreeks uit de snmpd.conf

een mooi Tshirt met Pim. is de beste enzo


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:42

Creepy

Tactical Espionage Splatterer

MTWZZ schreef op 01 oktober 2004 @ 10:25:
Heb je een voorbeeldje van hoe je output er nu uitziet?

Owja dit:
PHP:
1
echo "$huidige_status_output[0]\n";

gaat niet werken. Vervang dit eens door
PHP:
1
echo $huidige_status_output[0]."\n";


Ik heb zelf een aantal scripts ook met PHP geschreven voor system-tasks maar ik heb nou niet echt het idee dat het zoveel langzamer is.
offtopic:
de echo met aanhalingstekens gaat ook prima werken, aangezien PHP tussen aanhalingstekens ook variabelen e.d. vervangt (maar niet tussen quotes!). Of het netjes is is een tweede ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1