Encerra automaticamente o servidor na inatividade (SSH)?

6

Eu tenho um servidor hospedado em EC2 . O servidor é construído no Linux AMI , baseado no CentOS. É dedicado a um projeto de cliente e eu conecto via SSH. Às vezes, esqueço de desligar o servidor quando não utilizado, gerando custos desnecessários.

Como eu faço o servidor desligar automaticamente em inatividade, por exemplo após 30 min sem uma conexão SSH?

Naturalmente, estou procurando a solução mais simples. Um cheque a cada hora ou mais também seria OK, apenas algo que funciona de forma confiável.

    
por feklee 24.03.2013 / 12:27

3 respostas

5

Em janeiro de 2013, o Amazon CloudWatch oferece uma opção para Use o Amazon CloudWatch para detectar e desligar não utilizados Instâncias do Amazon EC2 , consulte a postagem no blog introdutório Amazon CloudWatch - Ações de alarme para detalhes sobre essa funcionalidade:

Today we are giving you the ability to stop or terminate your EC2 instances when a CloudWatch alarm is triggered. You can use this as a failsafe (detect an abnormal condition and then act) or as part of your application's processing logic (await an expected condition and then act). [emphasis mine]

Seu caso de uso está listado na seção Idéias à prova de falhas especificamente:

If you (or your developers) are forgetful, you can detect unused EC2 instances and shut them down. You could do this by detecting a very low load average for an extended period of time. This type of failsafe could be used to reduce your AWS bill by making sure that you are not paying for resources you're not actually using.

Como descrito, isso depende de ser capaz de detectar heuristicamente a condição apropriada ao acionar o alarme e parar a instância - você pode levá-lo ao próximo nível por meio de Publicação de métricas personalizadas para o CloudWatch com base na contagem de usuários SSH conectados, em tempo ocioso ou outro, e ganhe mais controle / precisão para o processo de detecção e encerramento desejado por sua vez.

    
por 25.03.2013 / 13:16
2

Se tudo o que você está procurando é manter o servidor em execução enquanto você está conectado e sua sessão ociosa por menos de n unidades de tempo, você pode fazê-lo através de um script cron que você mencionou, monitorando a saída de w(1) que informa IDLE tempo para usuário conectado, o que você pode usar.

    
por 24.03.2013 / 13:08
2

Você pode criar um script de tarefa cron na própria instância que usa um comando como

netstat | grep ssh | grep ESTABLISHED

e se nenhum resultado for retornado, escreva para o arquivo, então o cron tenta novamente e se ele não retornar nenhum resultado, o script executa isto.

/sbin/shutdown -h now
    
por 13.02.2014 / 20:55