Verifique se os usuários estão conectados, verificar condição, desligar automaticamente na hora definida

1

Primeiro a situação:

Eu tenho um servidor que eu quero desligar automaticamente à noite (00:00), mas eu preciso ter certeza de que ninguém está logado via ssh ainda. Se estiverem, eu permitirei até mais uma hora para uma segunda tentativa de desligamento (01:00), quando o servidor não funcionará.

Eu acho que posso ir com um cron job para desligar (a menos que haja uma maneira melhor de programar shutdowns), mas não saberia como implementar a verificação no primeiro caso.

Extra:

Existe uma maneira de saber se um usuário está usando ativamente seu compartilhamento de samba e, nesse caso, não conclui o procedimento de desligamento. Ou melhor ainda, verifique se há uma boa quantidade de E / S de disco que também não completará o desligamento.

Já vi algumas respostas que podem me ajudar, então eu gostaria de saber especificamente qual seria a melhor maneira de conseguir isso como um todo, sem hackear diferentes pedaços.

    
por fadmcrank 20.08.2011 / 10:05

1 resposta

4

Você pode verificar se há conexões ativas com:

netstat -an | grep ESTABLISHED | grep ":[portname] " | wc -l
  • A porta 22 é para conexões ssh.
  • A porta 445 é para conexões de samba.

Portanto, adicione isso a um script bash e adicione o script bash a um cronjob.

  1. Criando um cronjob:

    sudo su
    crontab -e
    

    Insira algo assim para um cheque às 24:00 e um desligamento forçado às 01:00:

    # Check for shutdown system at 24:00 every day
    00 0 * * * /usr/bin/shutdown_script
    # Shutdown at 01:00 every day
    00 1 * * * /usr/bin/shutdown -h now
    
  2. Crie o script (ainda como root;)):

    gedit /usr/bin/shutdown_script
    

    e adicione os comandos que você deseja verificar:

    #!/bin/bash
    users_ssh='netstat -an | grep ESTABLISHED | grep ':[445] ' | wc -l'
    users_ssh_alertvalue="0"
    if [ "$users_ssh" -eq "$users_ssh_alertvalue" ]; then
         /sbin/shutdown -h now
    fi 
    

    e, claro, torná-lo executável.

Você pode tornar isso mais refinado adicionando mais opções ao if . Tudo o que você precisa fazer é encontrar o comando correto para encontrar o valor que deseja verificar. Ainda não achei uma boa verificação de E / S ( iostat e iotop parecem promissores).

edite: enquanto procurava por um comando de verificação de E / S, encontrei mpstat . Ele relata as estatísticas relacionadas aos processadores (consulte man mpstat ). Tempo ocioso da CPU de mpstat :

mpstat | grep all | sed -s 's/.* all// ; s/ * / /g' | cut -d ' ' -f10

Você pode adicionar isso e desligar quando o tempo ocioso da CPU for maior que 98%.

    
por Rinzwind 20.08.2011 / 11:32