staging.inyokaproject.org

Mit shell script für lxc

Status: Ungelöst | Ubuntu-Version: Ubuntu 19.04 (Disco Dingo)
Antworten |

luiluiboy014

Anmeldungsdatum:
4. Februar 2018

Beiträge: 19

hallo leute kann mir einer helfen mit shell script haben ein kleines Problem ist lxc hdd abfrage

hier mein problem

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
if [[ "$3" = "hdd" || "$3" = "all" ]]; then
FREE="`pct exec $2 df | grep /dev/loop0`"
SIZE=$( echo "$FREE" | awk '{print $2}' )
USED=$( echo "$FREE" | awk '{print $3}' )
AVAI=$( echo "$FREE" | awk '{print $4}' )
PERC=$( echo "$FREE" | awk '{print $5}' )

if [ "$3" != "all" ]; then
return_info="$SIZE,$USED,$AVAI,$PERC"
else
HDD="$SIZE,$USED,$AVAI,$PERC"
fi
fi

In info line 215:
FREE="`pct exec $2 df (%) | grep /dev/loop0`"
^-- SC2006: Use $(..) instead of legacy `..`.
^-- SC2086: Double quote to prevent glo bbing and word splitting.

hoffe ihr könnt mir da helfen

Bearbeitet von redknight:

Codeblock spendiert

Bearbeitet von Cruiz:

Hilferufe aus dem Titel entfernt.

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

luiluiboy014 schrieb:

hallo leute kann mir einer helfen mit shell script haben ein kleines Problem ist lxc hdd abfrage

hier mein problem

if [[ "$3" = "hdd" || "$3" = "all" ]]; then
FREE="`pct exec $2 df | grep /dev/loop0`"
SIZE=$( echo "$FREE" | awk '{print $2}' )
USED=$( echo "$FREE" | awk '{print $3}' )
AVAI=$( echo "$FREE" | awk '{print $4}' )
PERC=$( echo "$FREE" | awk '{print $5}' )

if [ "$3" != "all" ]; then
return_info="$SIZE,$USED,$AVAI,$PERC"
else
HDD="$SIZE,$USED,$AVAI,$PERC"
fi
fi

In info line 215:
FREE="`pct exec $2 df (%) | grep /dev/loop0`"
^-- SC2006: Use $(..) instead of legacy `..`.
^-- SC2086: Double quote to prevent glo bbing and word splitting.

hoffe ihr könnt mir da helfen

Kann bestimmt jemand hier. Allerdings solltest Du schon richtig posten. Z.B. Codeblocks verwenden.

Und dann sagt Dir die Fehlermeldung doch eigentlich schon was Du tun sollst ( und in den darauf folgenden Zeilen auch richtig gemacht hast). Bei SIZE, USED, AVAI und PERC nutzt Du $(..), warum machst Du das für FREE anders?

luiluiboy014

(Themenstarter)

Anmeldungsdatum:
4. Februar 2018

Beiträge: 19

verstehe ich jetzt nicht können sie mir beispiel machen bitte

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

FREE="`pct exec $2 df (%) | grep /dev/loop0`"

ändern zu

FREE=$( pct exec $2 df (%) | grep /dev/loop0 )

luiluiboy014

(Themenstarter)

Anmeldungsdatum:
4. Februar 2018

Beiträge: 19

Jetzt bekomme ich jetzt das

1
2
3
4
5
6
In info line 215:
                        FREE=$( pct exec $2 df (%) | grep /dev/loop0 )
                             ^-- SC1073: Couldn't parse this command expansion.
                             ^-- SC1009: The mentioned parser error was in this command expansion.
                                               ^-- SC1036: '(' is invalid here. Did you forget to escape it?
                                               ^-- SC1072: Expected end of $(..) expression. Fix any mentioned problems and try again.

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

Hmm.. pct scheint zu Deiner LXC Umgebung zu gehören.

Keine Ahnung was dieser Befehl macht. Da musst Du schon erheblich mehr an Informationen liefern damit jemand helfen kann.

luiluiboy014

(Themenstarter)

Anmeldungsdatum:
4. Februar 2018

Beiträge: 19

  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
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
	if [ "$1" = "LXC" ]; then
	Status_VS "$1" "$2" "$3"
	STATUS="$return_status"

		if [ "$return_status" = "RUNNING" ]; then
	
			if [[ "$3" = "uptime" || "$3" = "all" ]]; then
			UPT0=$"`pct exec $2 uptime`"
			UPT1=$( echo "$UPT0" | awk -F"up " '{print $2}' | awk -F"load" '{print $1}' )
			UPT2=$( echo "$UPT1" | sed -e 's/,//g' )
			UPT3=$( echo "$UPT2" | awk -F"  " '{print $1}' )
			UPT4=$( echo "$UPT3" | cut -d" " -f2 )

				if [ "$UPT4" = "min" ]; then
				UPT5=$( echo "$UPT3" | cut -d" " -f1 )
				
					if [ "$3" != "all" ]; then
						return_info="0,0,$UPT5,0"
					else
						UPTIME="0,0,$UPT5,0"
					fi
				fi
				
				if [[ "$UPT4" = "day" || "$UPT4" = "days" ]]; then
				UPT5=$( echo "$UPT3" | cut -d" " -f1 )
				UPT6=$( echo "$UPT3" | cut -d" " -f3 )
				UPT7=$( echo "$UPT6" | cut -d":" -f1 )
				UPT8=$( echo "$UPT6" | cut -d":" -f2 )

					if [ "$3" != "all" ]; then
						return_info="$UPT5,$UPT7,$UPT8,0"
					else
						UPTIME="$UPT5,$UPT7,$UPT8,0"
					fi

				fi
				
				if [[ "$UPT4" != "min" && "$UPT4" != "day" && "$UPT4" != "days" ]] ; then
				UPT5=$( echo "$UPT3" | cut -d":" -f1 )
				UPT6=$( echo "$UPT3" | cut -d":" -f2 )

					if [ "$3" != "all" ]; then
						return_info="0,$UPT5,$UPT6,0"
					else
						UPTIME="0,$UPT5,$UPT6,0"
					fi
				fi
			fi
			
			if [[ "$3" = "ram" || "$3" = "all" ]]; then
			FREE="`pct exec $2 free | head -n 2 | tail -n 1`"
			SIZE=$( echo "$FREE" | awk '{print $2}' )
			USED=$( echo "$FREE" | awk '{print $3}' )
			AVAI=$( echo "$FREE" | awk '{print $4}' )

				if [ "$3" != "all" ]; then
					return_info="$SIZE,$USED,$AVAI"
				else
					RAM="$SIZE,$USED,$AVAI"
				fi
			fi
			
			if [[ "$3" = "cpu" || "$3" = "all" ]]; then
				if [ "$3" != "all" ]; then
					return_info="0"
				else
					CPU="0"
				fi
			fi
			
			if [[ "$3" = "swap" || "$3" = "all" ]]; then
			FREE="(pct exec $2 free | tail -n 1 | head -1)"
			SIZE=$( echo "$FREE" | awk '{print $2}' )
			USED=$( echo "$FREE" | awk '{print $3}' )
			AVAI=$( echo "$FREE" | awk '{print $4}' )
				
				if [ "$3" != "all" ]; then
					return_info="$SIZE,$USED,$AVAI"
				else
					SWAP="$SIZE,$USED,$AVAI"
				fi
			fi
		
			if [[ "$3" = "hdd" || "$3" = "all" ]]; then
			FREE=$( pct exec $2 df (%) | grep /dev/loop0 )
			SIZE=$( echo "$FREE" | awk '{print $2}' )
			USED=$( echo "$FREE" | awk '{print $3}' )
			AVAI=$( echo "$FREE" | awk '{print $4}' )
			PERC=$( echo "$FREE" | awk '{print $5}' )

				if [ "$3" != "all" ]; then
				return_info="$SIZE,$USED,$AVAI,$PERC"
				else
					HDD="$SIZE,$USED,$AVAI,$PERC"
				fi
			fi

			if [ "$3" = "status" ]; then
				return_info="$STATUS"
			fi
			
			if [ "$3" = "all" ]; then
				return_info="$STATUS|$UPTIME|$HDD|$RAM|$SWAP|$CPU"
			fi
			
		else
		return_info="NOK"
		fi
		
	fi

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

In einem Proxmox oder LXC Forum ist die Wahscheinlichkeit auf Hilfe wesentlich gößer!

pct exec ist anscheinend ähnlich wie ssh mit Einschränkungen. Soweit ich das verstehe liegt es an dem Client System auf dem Du das ausführst, das es im Orginal nicht funktioniert. Wahrscheinlich musst Du pct mitgeben das df in /bin/sh ausgeführt werden soll. Da passt aber dann auch wieder der mitgegebene Parameter (%) nicht.

Wie schon gesagt: Such Dir ein entsprechendes Forum mit Experten zu LXC/Proxmox

Ich kann da nicht weiter helfen, sorry.

luiluiboy014

(Themenstarter)

Anmeldungsdatum:
4. Februar 2018

Beiträge: 19

dankd dir aber trozdem

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Bleys schrieb:

FREE="`pct exec $2 df (%) | grep /dev/loop0`"

ändern zu

FREE=$( pct exec $2 df (%) | grep /dev/loop0 )

Hm. Das (%) steht nur in der Fehlermeldung, nicht aber im Script (1. Script, Zeile 2 im Forum). Dementsprechend müsste die Scriptzeile nicht

FREE=$( pct exec $2 df (%) | grep /dev/loop0 )

sondern

FREE=$(pct exec $2 df | grep /dev/loop0)

heißen - probier das doch mal.

Ich weiß nicht, was in $2 steht/stehen kann, evtl. sollte das "$2" heißen:

FREE=$(pct exec "$2" df | grep /dev/loop0)

Ich kenne aber weder pct noch LXC.

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

user_unknown schrieb:

Hm. Das (%) steht nur in der Fehlermeldung, nicht aber im Script (1. Script, Zeile 2 im Forum). Dementsprechend müsste die Scriptzeile nicht

Stimmt, ich werde älter 😉 Danke!

Ich kenne aber weder pct noch LXC.

dito

Antworten |