SLAB=76876(cat /proc/meminfo | egrep „Slab:” | awk „{print 768762;}”)
coaja analizează asta în aceste cuvinte
SLAB="76876(cat" /proc/meminfo | egrep "Slab:" | awk '{print 768762;}')
^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ ..................... ..............^
Unde caracterele „(pisica” fac parte din valoarea variabilei de mediu temporare SLAB.
Apoi, shell-ul încearcă să apeleze /proc/meminfo ca a comanda.
Asta lasă o paranteză de închidere neîmperecheată care provoacă eroarea de sintaxă awk
Nu sunt clar care este scopul SLAB=$$
si (pisică ...)
este. Încercați să setați variabila SLAB să dețină o valoare care concatenează pid-ul și rezultatul codului între paranteze?
Soluția mea: aș construi nagios -e
comanda pe bucati:
nagios_cmd=""
pentru var în Slab MemTotal; do
nagios_cmd+=$(printf '%s="${$}$(awk '\''/%s:/ {print $2}'\'' /proc/meminfo)"; ' $var $var)
Terminat
nagios_cmd+='awk -v s="$Slab" -v m="$MemTotal" '\''BEGIN {print 100*s/m}'\'
declara -p nagios_cmd
Aceasta iese
declare -- nagios_cmd="Slab=\"\${\$}\$(awk '/Slab:/ {print \$2}' /proc/meminfo)\"; MemTotal=\"\${\$}\ $(awk '/MemTotal:/ {printare \$2}' /proc/meminfo)\"; awk -v s=\"\$Slab\" -v m=\"\$MemTotal\" 'ÎNCEPE {printare 100*s /m}'"
care vă arată că coaja va proteja toate personajele care au nevoie de protecție.
Apoi invocați verificarea nagios ca:
/usr/lib64/nagios/plugins/check_generic.pl -n "slab_mem" -e "$nagios_cmd" -w '>50' -c '>80' -p "slab_mem"
# ................................................. .........^^^^^^^^^^^^^^
Aceasta poate fi scrisă ca o singură comandă awk fără a fi nevoie de variabilele shell temporare:
nagios_cmd='awk -F":" -v pid="$$" '\''
$1 == „Placă” {s = pid $2}
$1 == „MemTotal” {m = pid $2}
END {print 100*s/m}
'\'' /proc/meminfo'
Sau, pentru a ajuta cu iadul citat, un document aici:
nagios_cmd=$(cat <<'END_CMD'
awk -F":" -v pid="$$" '
$1 == „Placă” {s = pid $2}
$1 == „MemTotal” {m = pid $2}
END {print 100*s/m}
' /proc/meminfo
END_CMD
)