Você precisa de uma lista dos nomes que deseja monitorar. Ou você mantém essa lista manualmente ou extrai a lista de onde alguém mantém a lista das máquinas que deveriam estar em execução.
Você pode simplificar algumas coisas. O comando ping
já retorna um status de saída, você pode usá-lo. Além disso, você não precisa de redirecionamento para cada eco, uma vez que o loop é suficiente. Isso tem o benefício adicional de que o arquivo é inicializado e não contém as linhas da última execução.
for node in $(cat /tmp/node.txt); do
if ! ping -c 3 $node &> /dev/null; then
echo "$node"
fi
done > /tmp/nodedown.txt
Se você quiser uma estatística, pode contá-las ou usar wc
para contar as linhas nos dois arquivos.
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"