Sem mais informações sobre seus requisitos, sugiro pesquisar em Puppet e Chef para lidar com os itens 1, 2 e 3.
Item 4 é um pouco mais difícil - Você precisa de um sistema de monitoramento (dê uma olhada aqui, ou pergunte no google. Você receberá muitas sugestões), e se você quiser respostas automáticas, seu sistema de monitoramento terá que alimentar algum outro sistema para agir.
Isso não precisa ser muito complicado - eu implementei algo similar usando o InterMapper : Quando uma falha é detectada, o InterMapper executa um "notificador de linha de comando" "especificando o sistema com falha. O notificador de linha de comando é apenas um script de shell que usa o nome do sistema como argumento e o reinicia, enviando um email se a reinicialização falhar.