Мне это нужно каждые 2 минуты:
Я использую Debian (только текстовый режим).
Предполагая, что вам не нужны отдельные теги для total
, used
, free
shared
доступа и т.д., Вы можете обернуть весь вывод в соответствующие теги:
Следующий скрипт может быть сохранен как (например) memoryinfo-xml.sh
:
#!/bin/bash
# memoryinfo-xml.sh - wrap output of free + vmstat in XML tags
echo "<output>"
echo -e "\t<date>$(date)</date>"
echo -e "\t<free>$(free)</free>"
echo -e "\t<vmstat>$(vmstat)</vmstat>"
echo "</output>"
пример вывода:
<output>
<date>Thu 30 Mar 16:21:18 BST 2017</date>
<free> total used free shared buffers cached
Mem: 3853532 3721596 131936 100868 227652 3024584
-/+ buffers/cache: 469360 3384172
Swap: 1182716 2512 1180204</free>
<vmstat>procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 2512 132084 227652 3024584 0 0 3 2 4 4 1 0 99 0 0</vmstat>
</output>
Как видите, это не совсем красиво!
Очень похоже на ранее, сохраните как (например) memoryinfo-json.sh
:
#!/bin/bash # memoryinfo-json.sh - wrap output of free + vmstat in json # thanks to https://stackoverflow.com/a/1252191 for \n replacement echo "{ \"output\":" echo -e "\t { \"date\": \"$(date)\", " echo -e "\t \"free\": \"$(free | sed ':a;N;$!ba;s/\n/||/g')\", " echo -e "\t \"vmstat\": \"$(vmstat| sed ':a;N;$!ba;s/\n/||/g')\" " echo "}"
пример вывода:
{ "output": { "date": "Thu 30 Mar 16: 48: 51 BST 2017", "free": "total used free shared buffers cached || Mem: 3853532 3722428 131104 100868 227888 3024844 || -/+ buffers/cache: 469696 3383836 || Swap: 1182716 2512 1180204", "vmstat": "procs-- -- -- -- -- - memory-- -- -- -- -- -- - swap-- -- -- - io-- -- - system-- -- -- --cpu-- -- - || r b swpd free buff cache si so bi bo in cs us sy id wa st || 1 0 2512 131096 227888 3024844 0 0 3 2 4 4 1 0 99 0 0" } }
Обратите внимание, что для получения действительного JSON символы новой строки были заменены символом двойной трубы (||
) посредством замены sed
.